Skip to content
neoremind edited this page Aug 8, 2015 · 6 revisions

性能测试

测试场景

  1. 传入压缩前1kString,不做任何处理,原样返回
  2. 传入压缩前50kString,不做任何处理,原样返回
  3. 传入压缩前200kString,不做任何处理,原样返回
  4. 传入压缩前500kString,不做任何处理,原样返回
  5. 传入压缩后5k pojo(20个嵌套的复杂person对象),不做任何处理,原样返回

上述场景分别作1、10、20、50、100并发测试。

计算公式

  • QPS(TPS):每秒钟request/事务数量
  • 并发数: 系统同时处理的request/事务数
  • 响应时间: 一般取平均响应时间

它们之间的关系:

QPS(TPS)= 并发数/平均响应时间

测试环境

硬件环境

类型 配置
服务端 Linux内核版本:2.6.32_1-11-0-0。CPU:Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz processor_count : 12。内存:128G
客户端 Linux内核版本:2.6.32_1-11-0-0。CPU:Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz processor_count : 12。内存:128G

软件环境

类型 配置
Java 1.6.30
JVM参数 -server -Xms2000m -Xmx2000m -Xmn800m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:SurvivorRatio=4 -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
Tomcat 6.0.28

Tomcat详细配置:

<Connector port="8260" maxHttpHeaderSize="8192"
               maxThreads="1000" minSpareThreads="75" maxSpareThreads="350"
               enableLookups="false" redirectPort="8263" acceptCount="750"
               debug="0" connectionTimeout="300000" disableUploadTimeout="true"
               URIEncoding="UTF-8" maxKeepAliveRequests="100000" KeepAliveTimeout="180"
                           compression="on" 
                           compressionMinSize="40960" 
               noCompressionUserAgents="gozilla, traviata" 
                           compressableMimeType="text/html,text/xml,application/json,text/javascript,text/css,text/plain"/>

测试结果

1k、50k、200k、500k随机字符串发送到服务端直接echo返回,在各种并发环境下的响应时间如下,单位为毫秒(ms)。

并发数/数据大小 1k 50k 200k 500k
1并发 0.265 1.61 6.022 17.233
10并发 0.419 1.697 5.541 14.826
20并发 0.516 1.595 5.527 14.521
50并发 1.813 2.198 7.103 14.403
100并发 1.832 1.927 6.672 14.026

图表见下,其中最常见的使用场景大致为20并发+500k数据,响应时间在14ms左右,能够满足绝大部分场景应用。

折算QPS的图表如下,这里以常见的20并发为统计基数,500k数据的QPS能够达到1480,20个复杂的Person对象序列化后的QPS在2899,能够满足高性能服务的场景。