Contents
  1. 1. 一、测试内容
  2. 2. 二、测试方法及数据准备
  3. 3. 三、测试环境
  4. 4. 四、jmeter设置
  5. 5. 五、测试数据
    1. 5.1. 1 测试一
    2. 5.2. 2 测试二
    3. 5.3. 3 测试三
    4. 5.4. 测试四
    5. 5.5. 测试五
  6. 6. 六、结论

一、测试内容

本次测试是针对业务微信端通知消息模块进行的压力测试,
测试用例是模拟用户点击推送消息查看通知详情。

二、测试方法及数据准备

本次采用开源测试工具jmeter采用多线程的方式模拟大量客户端向服务器方发送业务请求,达到压力测试的目的。
数据准备:5万个虚拟用户(uic_account_info表导入5万记录)
50万条通知明细(notice表10条、notice_subscr表导入50万记录)。

三、测试环境

Tomcat服务器:wx-dev-web,2核cpu,4g内存
Jmeter服务器:wx-dev-test02,2核cpu,4g内存
带宽:金山云内网带宽

四、jmeter设置

测试url:内部链接
Jmeter线程200,单线程循环100次
测试脚本:内部脚本
参数化文件:内部数据

名词定义(时间的单位均为ms):
Samples – 本次场景中一共完成了多少个线程
Average – 平均响应时间
Median – 统计意义上面的响应时间的中值
90% Line – 所有线程中90%的线程的响应时间都小于xx
Min – 最小响应时间
Max – 最大响应时间
Error – 出错率
Troughput – 吞吐量
KB/sec – 以流量做衡量的吞吐量

五、测试数据

1 测试一

基础参数,只有JVM内存修改为1000M。
吞吐量基本稳定在900以上,出错率较高基本>1%

Java参数:

1
-Xms1000M -Xmx1000M -Xss512k

Tomcat参数:

1
2
3
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

数据样本:

Label # Samples Average Median 90% Line 95% Line 99% Line Min Max Error % Throughput KB/sec
1 20000 172 111 190 239 3000 2 3242 1.38% 945.7 195.3
2 20000 181 112 204 343 3001 2 3574 1.26% 938.5 193.7
3 20000 178 110 215 278 3001 3 3374 1.42% 947.5 195.7
4 20000 171 110 210 262 3001 3 3280 1.23% 987.5 203.8
5 20000 176 112 206 257 3001 3 3302 1.44% 985 203.5

2 测试二

JVM参数不变,Tomcat线程数调到30000,测试tomcat线程过高的情况。
从压测结果看起到了反效果,吞吐量大部分只能在400左右。此时CPU达到瓶颈,吞吐量不稳定,tomcat不能线性处理请求,会出现卡顿并反映在cpu及jvm上

Java参数:

1
-Xms1000M -Xmx1000M -Xss512k

Tomcat参数:

1
2
3
4
5
6
7
8
9
10
<Connector port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
enableLookups="false"
maxThreads="30000"
minSpareThreads="512"
maxSpareThreads="2048"
acceptCount="35000"
debug="0"
disableUploadTimeout="true"
redirectPort="8443" />

数据样本:

Label # Samples Average Median 90% Line 95% Line 99% Line Min Max Error % Throughput KB/sec
1 20000 336 136 288 456 3000 2 30003 1.25% 401.8 82.9
2 20000 391 294 483 627 2223 3 31000 0.60% 327.3 67.3
3 20000 217 162 341 428 1224 3 30005 0.68% 431.1 88.7
4 20000 188 148 268 340 1176 3 3714 0.50% 939.5 193.2
5 20000 374 135 254 317 3000 2 30007 1.04% 414.9 85.5

3 测试三

把Tomcat线程数减少到1000,结果与测试二类似

Java参数:

1
-Xms1000M -Xmx1000M -Xss512k

Tomcat参数:

1
2
3
4
5
6
7
8
9
10
<Connector port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
enableLookups="false"
maxThreads="1000"
minSpareThreads="128"
maxSpareThreads="512"
acceptCount="3000"
debug="0"
disableUploadTimeout="true"
redirectPort="8443" />

数据样本:

Label # Samples Average Median 90% Line 95% Line 99% Line Min Max Error % Throughput KB/sec
1 20000 25 22 40 51 71 3 143 0.00% 767.5 157.4
2 20000 270 197 466 625 1711 3 4063 0.90% 672.2 138.5
3 20000 335 133 327 425 1239 3 30011 0.94% 411.1 84.7
4 20000 254 112 258 308 1093 3 30010 0.76% 458.2 94.3
5 20000 265 146 298 387 1185 3 30003 0.71% 373.8 71.8

测试四

继续调小tomcat线程,测试结果比之前稳定,吞吐量保持在高水平,并且出错率比默认参数低一倍左右,基本<1%。

Java参数:

1
-Xms1000M -Xmx1000M -Xss512k

Tomcat参数:

1
2
3
4
5
6
7
8
9
10
<Connector port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
enableLookups="false"
maxThreads="256"
minSpareThreads="32"
maxSpareThreads="128"
acceptCount="300"
debug="0"
disableUploadTimeout="true"
redirectPort="8443" />

数据样本:

Label # Samples Average Median 90% Line 95% Line 99% Line Min Max Error % Throughput KB/sec
1 20000 172 134 255 297 1151 2 3245 0.64% 1005.7 206.9
2 20000 202 188 302 346 436 3 3261 0.25% 898 184.4
3 20000 188 162 271 313 1105 2 3347 0.31% 940.4 193.2
4 20000 194 160 278 331 1216 2 3153 0.74% 921.6 189.7
5 20000 182 164 253 291 487 4 3240 0.50% 984.8 202.5

测试五

继续调小tomcat线程,测试取得了最理想的结果,吞吐量稳定保持在高水平,比之前测试都要高,其他各项结果均有不同程度提升,关键是出错率为0%。

Java参数:

1
-Xms1000M -Xmx1000M -Xss512k

Tomcat参数:

1
2
3
4
5
6
7
8
9
10
<Connector port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
enableLookups="false"
maxThreads="128"
minSpareThreads="32"
maxSpareThreads="64"
acceptCount="300"
debug="0"
disableUploadTimeout="true"
redirectPort="8443" />

数据样本:

Label # Samples Average Median 90% Line 95% Line 99% Line Min Max Error % Throughput KB/sec
1 20000 176 179 222 234 262 5 333 0.00% 1069.9 219.4
2 20000 208 204 272 299 348 6 494 0.00% 920.5 188.8
3 20000 182 183 230 243 267 9 323 0.00% 1036.8 212.6
4 20000 178 180 230 244 276 3 3004 0.00% 1036.8 212.6
5 20000 181 183 234 248 277 5 387 0.00% 1039.3 213.1

六、结论

  1. 当前最大瓶颈在服务器配置,主要受cpu限制,不能承载大并发请求。
  2. 此项压测对数据库无明显依赖,测试过程中数据库指标健康。
  3. Tomcat线程按测试五参数调整能达到最优性能,吞吐率稳定而且出错率为0。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Connector port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    enableLookups="false"
    maxThreads="128"
    minSpareThreads="32"
    maxSpareThreads="64"
    acceptCount="300"
    debug="0"
    disableUploadTimeout="true"
    redirectPort="8443" />
  4. 按当前服务器配置,tomcat参数调优对整体吞吐性能影响不算明显,大概提升10%左右,但是对出错率有较好提升。
Contents
  1. 1. 一、测试内容
  2. 2. 二、测试方法及数据准备
  3. 3. 三、测试环境
  4. 4. 四、jmeter设置
  5. 5. 五、测试数据
    1. 5.1. 1 测试一
    2. 5.2. 2 测试二
    3. 5.3. 3 测试三
    4. 5.4. 测试四
    5. 5.5. 测试五
  6. 6. 六、结论