IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:performance testing

共 13 篇相关文章

IT 累计浏览 3,565

构建C1000K的服务器(2) – 实现百万连接的comet服务器

这篇讲的是作者如何从零实现一个支持百万并发连接的Comet服务器。在解决了系统内核参数调整的基础问题后,文章将焦点转向了具体的应用实现。 作者选择用C/C++和libevent来构建核心,重点在于如何高效管理百万级的连接与通道。一个巧妙的设计是:服务器启动时便预先分配好100万个通道对象,而动态的订阅者则通过内存池管理,这使得初始内存占用控制在24MB。 最吸引人的是文章展示的实测数据。通过逐步增加连接数进行压力测试,结果非常直观:每个Comet连接大约只消耗2.7KB内存。最终,在支撑100万空闲连接时,进程总内存占用约2.7GB,而CPU使用率维持在0%。这清晰证明了该架构在高并发、低活跃度场景下的高效性。 项目的代码已在GitHub开源,文章提供的测试方法和详细数据,为需要构建类似长轮询服务的开发者提供了一个扎实的参考范例。

IT 累计浏览 5,097

正确用DD测试磁盘读写速度

这篇讲的是如何正确使用dd命令测试磁盘读写速度。作者从四种常见的dd测试命令写法出发,对比了它们之间一个关键但容易忽略的差异:对系统写缓存的处理方式。 文章指出,最简单的dd命令(`dd bs=1M count=128 if=/dev/zero of=test`)其实并没有把数据真正写到磁盘上,它只是将数据读入内存缓存,因此得出的速度“超级快”但毫无参考价值。即便在命令后加上`; sync`,由于sync是独立执行的,在开始同步写入前dd早已显示了“假”速度。 真正的区别在于两个参数:`conv=fdatasync` 与 `oflag=dsync`。前者会在dd执行完毕后进行一次完整的同步操作,确保数据落盘,从而测出相对真实的、结合了读写缓存的持续写入性能;后者则强制每次写入1MB数据后都进行同步,几乎完全绕过缓存,模拟的是最慢的、无缓存优化的随机小文件写入场景。 因此,对于评估磁盘的常规读写性能,作者建议使用 `conv=fdatasync` 参数,这样测得的数据最贴近实际工作负载。理解这些细微差别,能帮助我们避免被虚高的测试数据误导,更准确地评估存储子系统的真实性能。

IT 累计浏览 3,328

easy_runner一个简单的压测程序

这篇讲的是作者如何从“HTTP压测工具应该足够简单又实用”这个朴素想法出发,亲手实现了一个名为easy_runner的轻量级压测程序。 文章的核心在于展示其实现思路:它没有依赖复杂的框架,而是用Java的线程池构建了一个清晰的模型。主线程负责解析参数、构建任务并分发给工作线程,而每个worker线程则独立地对目标地址发起请求、记录耗时与状态码,并最终汇总统计数据。这种“一主多从”的分工,既利用了多核CPU,又保证了压测逻辑的清晰。 巧妙之处在于作者用不多的代码就实现了并发控制、结果收集和简单的报告输出,让工具既易于理解又具备实际可用性。文章最后附上了运行效果,展示了如何对本地服务发起不同并发数的请求,并输出包括平均耗时、成功率在内的关键指标。 如果你在寻找一个源码清晰、易于上手或二次开发的压测工具,或者想了解一个小型并发程序是如何从设计到实现的,这篇文章提供了一个不错的实践案例。

IT 累计浏览 2,522

让代码取代你的配置文件吧

这篇讲的是,作者从团队维护复杂微服务配置的痛点出发,提出用代码来“生成”配置文件的实践方案。 文章背景是,传统YAML或JSON配置在项目规模增大后,容易出现重复、难以校验和重构的困境。作者团队为此设计了一个轻量级的方案:用Python代码定义配置结构,并封装了环境变量注入、模板渲染和最终输出为标准配置文件的流程。 核心思路在于,让配置也像代码一样可以模块化、复用和测试。比如,他们抽象出了基础配置类,不同服务只需继承并覆盖特定部分。文章还展示了如何通过简单的函数调用,就完成数据库连接字符串在不同环境(开发、生产)间的切换,同时保持类型安全。 这种“配置即代码”的方法,显著减少了复制粘贴错误,让配置变更可以通过代码审查进行。作者指出,虽然引入了一层构建步骤,但对于配置逻辑复杂的系统,这种可控性的提升是值得的。

IT 累计浏览 2,943

吞吐率――我们需要了解什么

这篇讲的是吞吐率这个核心性能指标到底指什么、为什么重要,以及我们在分析时常常忽略的关键点。作者从最基础的定义出发,即服务器单位时间内处理的请求数(reqs/s),但很快切入实际场景:光知道这个数字大小意义有限,真正需要关注的是它背后的支撑因素与瓶颈。 文章特别澄清了几个常见误区:比如吞吐率高不一定代表服务器性能好,因为可能伴随着极高的错误率或超长的响应时间;或者将它与并发用户数简单等同。作者强调,吞吐率必须结合响应时间、错误率等一起来看,才能真实反映系统健康度。文中可能还探讨了影响吞吐率的软硬件因素,比如网络带宽、应用代码效率、数据库锁等,并指出了在容量规划和故障排查中如何利用这一指标。 理解吞吐率,不只是记住一个单位,而是掌握一种剖析系统整体处理能力与瓶颈的视角。

IT 累计浏览 6,145

读腾讯大讲堂

作者最近重新翻阅了腾讯大讲堂中的纯技术资料,发现这些内容虽然大多是2008年之前的,但依然能带来不少启发。与国外技术资料相比,这些来自国内顶尖团队的一手分享在表达和思路上更贴合本土工程师的阅读习惯与上下文。 核心观点在于,经典的技术沉淀并不会过时。作者结合自己近半年的工作经历,发现许多解决问题的思路与这些旧资料中提到的方案有共通之处。这表明,在追逐新技术的同时,回过头审视团队过往的深度总结,往往能获得新的共鸣与验证。 这篇文章的价值,在于它提供了一个“技术考古”的视角。它提醒我们,在快速迭代的行业里,那些经过时间沉淀、解决过具体问题的技术思考,依然是当下工作中可借鉴的宝贵资源,其内在逻辑和工程智慧具有跨越时间的生命力。

IT 累计浏览 3,928

神奇的两次按位非运算符

这篇讲的是JavaScript中一个相当冷门但巧妙的取整技巧:对一个数字连续使用两次按位非运算符 `~~`,其效果在大多数情况下等同于 `Math.floor`。 作者从James Padolsey的博客中引出了这个知识点,并直接进行了关键对比。虽然表面上看两者都是向下取整,但核心差异在于底层处理的数据范围。按位非运算符会将操作数先转换为32位整数,这意味着它对超过32位整数范围的大数和负数会产生与`Math.floor`不同的结果。例如,`~~1.99` 会得到 `1`,而 `~~3000000000.5` 会得到一个意想不到的负值,因为数值在按位运算中被截断了。`Math.floor` 则稳健地处理IEEE 754标准的64位浮点数。 因此,两者的适用场景泾渭分明。`Math.floor` 是通用、可预测的数学函数首选。而 `~~` 的优势则在于其极致的简洁和执行速度,它本质上是一个位运算,对于性能敏感且数值已知在安全范围内的场景(如数组索引、简单的像素坐标计算),可以成为一个非常高效的替代方案。这个小技巧虽然不常用,但它揭示了JavaScript在数字处理和类型转换上的一些底层特性,为理解语言灵活性提供了又一个有趣的视角。

IT 累计浏览 3,698

apache下ab网站压力测试命令的参数、输出结果的中文注解

作者分享了一篇实用笔记,核心是关于 Apache 自带的压力测试工具 ab(ApacheBench)的详细解读。 这篇讲的是,虽然 ab 是很多开发者和运维人员工具箱里的“老熟人”,但其众多参数和输出结果里那些数字的具体含义,常常被忽略或误解。文章没有停留在“ab 可以用于测试”的层面,而是像一份贴心的说明书,逐一注解了 `-n`(请求数)、`-c`(并发数)等关键参数的含义与用法,并对最终输出报告中诸如“Requests per second”(每秒请求数,即吞吐量)、“Time per request”(平均请求耗时)等核心指标进行了中文标注。 它特别适合需要对网站性能进行快速初步评估,或想理解压力测试基本原理的读者。通过这篇文章,你可以把 ab 从一个“黑盒”命令,变成一个参数清晰、结果可读的性能分析利器,用于验证服务器配置调整、简单代码优化前后的效果差异。

IT 累计浏览 5,914

关于Linux的文件系统cache

这篇讲的是Linux文件系统里那个看不见摸不着、却至关重要的“隐形加速器”——系统Cache。作者没有停留在理论概念,而是直接通过一系列测试来验证,这个为文件读写服务的透明缓存层,在不同场景下到底如何表现。 文章聚焦于几个关键测试场景:连续大文件读写时cache如何吞吐、随机小IO混合负载下它的行为模式,以及当系统内存开始紧张、面临回收压力时,cache占用的内存又会如何变化。这些测试数据直观地揭示了cache的工作机制:它是提升文件I/O性能的绝对主力,但它的容量和行为又直接与系统整体的内存管理策略挂钩。 结论很明确:善用cache能极大加速应用,但理解它的运作边界,并在必要时进行调优,才能让它稳稳地充当“加速器”,而不是在高负载下变成性能的拖累。如果你曾困惑于为什么文件读写速度时快时慢,或者想搞明白内存与IO性能之间的微妙平衡,这篇实测文章提供了一个非常扎实的观察角度。

IT 累计浏览 3,091

“并发用户数”、“系统用户数”和“同时在线用户数”的计算公式

这篇讲的是如何区分三个常被搞混的性能指标:并发用户数、系统用户数和同时在线用户数。作者从实际场景出发,用一个具体的例子拆解了它们的不同定义与计算逻辑。 核心差异在于视角与用途。系统用户数是系统潜在的总用户量,通常用于容量规划;同时在线用户数反映某一时刻登录系统的实际人数,关注会话保持;而并发用户数则指同一时刻向服务器发起请求的用户数,是评估系统负载能力的关键。文章特别强调,很多人误将“在线”等同于“并发”,但实际场景中,并发用户数通常远小于同时在线用户数——因为大多数在线用户在某一时刻可能只是空闲浏览或思考,并未持续产生请求。 区分清楚这些概念,对于做压测、设定性能目标和规划系统资源至关重要。文章通过实例把抽象定义变得直观,帮助读者在后续工作中更准确地量化需求与评估系统表现。

IT 累计浏览 3,721

InnoDB select性能拐点测试

这篇测试探索了InnoDB引擎中一个广为流传的“性能拐点”现象。传说当表中的数据量累积到某个临界值后,单表查询(Select)性能会出现显著下滑。作者没有止步于传闻,而是设计了一套测试方案来实际验证,并试图找出这个性能阈值的确切位置。 文章的核心价值在于其验证精神。它没有直接给出结论,而是带领读者重现了发现问题的过程:如何设计测试数据、使用何种查询模式、观察哪些性能指标。虽然摘要中无法直接给出具体的拐点数值(这正是文章的看点),但整个测试过程本身,就为有类似性能疑虑的DBA或后端开发者提供了一个可复现的分析思路。对于需要处理海量数据表、或面临数据库性能瓶颈的团队来说,这篇文章的测试方法论比单一的结论更有参考意义。

IT 累计浏览 3,758

一个小小的C 写的web server

这篇讲的是作者如何在工作突然清闲后,给自己定下一个小目标——用C语言从头实现一个Web服务器。 文章没有堆砌宏大的架构设计,而是真实记录了一个开发者利用空档期进行“微型项目”学习的过程。作者从最基础的网络编程概念出发,一步步搭建起了一个虽然小巧但功能完整的HTTP服务器。文中具体涉及了如何处理socket监听、解析HTTP请求头,以及如何将服务器文件目录的内容作为响应返回给浏览器。这种“造轮子”的实践,恰好剥离了现代框架的复杂外壳,直抵Web服务的运行内核。 通过这个项目,作者不仅重新巩固了C语言和系统编程知识,更在实现最简单的静态文件服务时,理解了HTTP协议请求-响应循环的本质。这个小工具虽然无法用于生产环境,但其价值在于提供了一条清晰的学习路径:将理论知识转化为可运行的代码,哪怕只是一个“小小”的服务器。对于同样想夯实基础的读者来说,跟着这样一步步的实践走下来,收获远比阅读理论要直接得多。

IT 累计浏览 3,767

估算Apache所需要的内存

这篇讲的是在实际生产环境中,如何更靠谱地估算Apache所需的内存。 作者指出,想通过公式精确计算Apache的内存开销其实很困难。因为不同服务器的硬件配置、安装的模块以及实际承载的线上负载都存在差异,纯粹的理论估算往往与实际情况有出入。 因此,文章更推荐的实践思路是:到类似的线上环境中去,观察服务器的真实负载情况和进程的资源占用。只有通过这种方法,才能得出真正符合自身业务特点的内存需求,毕竟每家的“配置和模块是有差异的”。 文章强调了“掌握在自己手里”的重要性——最终,最可靠的估算依据来自于你对自己生产环境的直接观察和分析,而非通用的计算公式。这对于规划和优化Web服务器资源分配,具有很强的实操指导意义。