概述

在本地针对项目的登录接口做了一次简单的压力测试。200并发持续120s,观察吞吐量

性能测试连载 (35)-详细的 TPS 调优笔记_内存空间

性能测试连载 (35)-详细的 TPS 调优笔记_老年代_02

如图所示,吞吐量波动巨大,完全不正常。现在我们需要去观察一下服务器了

mpstat -P ALL 1* 先看一下cpu的运行情况

性能测试连载 (35)-详细的 TPS 调优笔记_java_03

性能测试连载 (35)-详细的 TPS 调优笔记_java_04

可以发现cpu的利用率呈现一种阶梯式递增的趋势,但是负载却不高,说明cpu运行的问题不大

jstat -gcutil 1 1000观察一下内存gc的情况

性能测试连载 (35)-详细的 TPS 调优笔记_长连接_05

老年代内存空间不足了,所以导致新生代的对象进不来,频繁fullgc,fullgc的时间又会很长,所以吞吐量一直上不去
检查jvm的内存空间配置

性能测试连载 (35)-详细的 TPS 调优笔记_长连接_06

性能测试连载 (35)-详细的 TPS 调优笔记_tomcat_07

堆区总共只有1g的内存,几乎全部分给了新生代,导致老年代只有5M的可怜空间

修改内存配置
现在来修改一下内存参数,再加入一个并行回收的机制

性能测试连载 (35)-详细的 TPS 调优笔记_内存空间_08

  •  
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server  -Xms200m -Xmx200m  -XX:NewSize=200m   -XX:NewRatio=2 -XX:SurvivorRatio=8  "

 

性能测试连载 (35)-详细的 TPS 调优笔记_长连接_09

再次运行脚本,观察TPS和gc频率

性能测试连载 (35)-详细的 TPS 调优笔记_tomcat_10

性能测试连载 (35)-详细的 TPS 调优笔记_tomcat_11

这次运行,fullgc的频率变得很低了,而且吞吐量也比较平稳,没有什么大的波动。但是运行到一分半钟的时候,吞吐量出现了塌方式的下降,同时出现了异常。
观察异常日志,发现超过了tomcat最大连接数了

性能测试连载 (35)-详细的 TPS 调优笔记_java_12

修改tomcat连接数配置,再次运行脚本

性能测试连载 (35)-详细的 TPS 调优笔记_长连接_13

  •  
    <Connector port="8080" protocol="HTTP/1.1"                                                                                    connectionTimeout="20000"                                                                                          redirectPort="8443" />                                                                                  <!-- A "Connector" using the shared thread pool-->                                                                                                                                                                                    <Connector executor="tomcatThreadPool"                                                                                        port="8080" protocol="HTTP/1.1"                                                                                    connectionTimeout="20000"                                                                                          redirectPort="8443"                                                                                                 maxThreads="1000"                                                                                                  acceptCount="1000"                                                                                  />

性能测试连载 (35)-详细的 TPS 调优笔记_老年代_14

性能测试连载 (35)-详细的 TPS 调优笔记_长连接_15

这次不像刚刚那要大面积报错了,但是依然有一些异常出现。有一部分是超时,还有一部分是 **Software caused connection abort: recv failed

调整一下请求的连接方式,使用java模式,并保持长连接,再观察运行结果

性能测试连载 (35)-详细的 TPS 调优笔记_长连接_16

性能测试连载 (35)-详细的 TPS 调优笔记_老年代_17

性能测试连载 (35)-详细的 TPS 调优笔记_老年代_18

这次一个报错的都没有了!