Chen Jian's Java Blog 

比较一个系统中两个模块的性能差别:不要同时压这两个模块

by Chen Jian


Posted on 2014-11-24 12:00 in Performance


要比较一个系统中两个模块的性能差别(比如同一个库中的两个类似的表),有两种压测模式: 1. 一个test plan含两个senario, 执行一次,同时出两个模块的结果。 2. 搞两个test plan, 各带一个senario; 各执行一次,各出一个结果。 第一种模式很有吸引力,因为它可省下很多重复的配置工作;只执行一次,比较省时;像jmeter之类的还会直接给出直方图,以示比较。 然而,我的亲身经历表明,第1种模式由于公共资源占用问题会导致“大锅饭”效应:...


高并发应用要注意选择网卡

by Chen Jian


Posted on 2014-10-25 12:00 in Performance


网卡不仅带宽要高,而且一定要支持多队列,单队列网卡的中断机制无法利用多核CPU的能力.


准备性能测试数据的常见误区

by Chen Jian


Posted on 2014-10-09 12:00 in Performance


1. 数据库里的数据量太小。 2. 数据或参数均匀分布,忽略了热区(hot spot)的存在。 3. 在循环中使用同样的参数,触发了缓存而不自知。 最好的办法是: 1. 把生产环境现有的数据复制到测试环境中 2. 在生产环境中记录日志,记下所有数据的产生和访问参数,然后在测试环境中重放它们。


性能测试:rt要看percentile response time

by Chen Jian


Posted on 2014-10-09 12:00 in Performance


一次性能测试会访问系统很多次,每次的rt都不一样。应该看哪个值? 看max response time并没有意义,因为它可能只是个尖峰(spike),是奇异点。 看average response time会好很多,但如果尖峰太夸张,可能会严重影响平均值。 最合适的值是percentile response time, 比如"95%的请求的rt在5ms以内" 这种。


名词解释:benchmarking v.s. profiling

by Chen Jian


Posted on 2014-10-09 12:00 in Performance


benchmarking - 即平常所说的性能测试:你的系统有多快,极限是多少 profiling - 即调优。为什么我的系统的rt和qps是这个状况,是什么引起的?


concurrency并非性能测试的结果,而是测试条件

by Chen Jian


Posted on 2014-10-09 12:00 in Performance


一个系统能承载多大的concurrency (同一瞬间连接中的tcp连接数,或者同时访问系统的用户数) ?对于http系统来说,这个问题意义不大。 你应该要逐渐增大concurrency, 直到你在合理的rt范围内找到qps的极限。qps和rt才是你关心的东西,当这个极限到来时,concurrency是多少,根本是无所谓的,因为只有qps和rt才能真正代表系统为用户提供服务的能力。 正如  ‘High Performance MySQL' 所说: concurrency is...


一个慢sql可能会成为害群之马

by Chen Jian


Posted on 2014-08-22 12:00 in Performance


一条sql执行慢,不仅相关业务受影响,其他业务也可能影响。 数据库连接是有限的,一条慢sql执行慢,就意味着它会在较长时间内占用数据库连接 ; 如果并发执行慢sql, 很容易占用大量的数据库连接,其他的快sql获取不到连接,执行不了,快sql对应的sql也就受影响了,最终导致整个系统的可用性都出问题。 除了数据库连接,慢SQL(或者大规模数据处理如批量数据清理)还会占用数据库的其他资源。 比如过久占用锁、占用过多CPU/内存等,这些都有可能导致其他sql不能立即执行。 ...


收藏一本书: Java性能优化权威指南

by Chen Jian


Posted on 2014-04-15 12:00 in Performance


http://www.ituring.com.cn/book/852


单个数据库操作RT较大的原因

by Chen Jian


Posted on 2014-04-04 12:00 in Performance


可能的原因: 1. sql未调优,比如没有走索引 2. 读写数据过多 3. 当前并发过高,DB已经吃不消 4. 并发锁 5. Java/Php程序中的连接池已经耗尽,新操作需要等待 待续 。。。


关于模拟大量长连接,收藏两篇文章

by Chen Jian


Posted on 2013-12-17 12:00 in Performance


http://blog.lifeibo.com/blog/2011/07/07/200-long-connection.html http://blog.yufeng.info/archives/1380


压力测试中几种不同的”压力“

by Chen Jian


Posted on 2013-12-16 12:00 in Performance


1. 请求的数据量大小(字节数) 2. 每秒请求数    a. 短连接应用:不必多说    b. 长连接应用:大量连接建立请求 3. 在线数    a. 短连接应用:Session数    b. 长连接应用:维持的长连接数(socket数) 4. 留存数据量: 数据库里已有的数据量 待续。。。


性能测试环境准备checklist

by Chen Jian


Posted on 2013-12-16 12:00 in Performance


尽量将性能环境的以下参数调成跟生产环境一致: 1. 硬件 2. 网络 3. log日志级别 待续。。。


Jeff Dean给出的各种操作的时延

by Chen Jian


Posted on 2013-01-31 12:00 in Performance


Numbers Everyone Should Know:


收藏一个非常轻量的性能测试工具: http_load

by Chen Jian


Posted on 2013-01-16 12:00 in Performance


收藏一个非常轻量的性能测试工具: http_load 它跟apache ab比较类似,但有个优点是可以接收多个URL作为测试输入,而不像apache ab那样,一次只能使用一个URL. 


压力测试要测久一点才有意义

by Chen Jian


Posted on 2013-01-16 12:00 in Performance


压力测试要测久一点才有意义。 有些系统指标,比如cpu load, 会随着测试的执行而逐渐变高。跑完60秒后发现单核load仍低于1就宣布压测通过,这是不对的。 那要在什么情况下才停止执行? 一般来说,可以等到系统指标稳定到一个值,或者系统指标超过了你心目中的安全权限(比如单核load>2)