概述
在本地针对项目的登录接口做了一次简单的压力测试. 200 并发持续 120s, 观察吞吐量
运行结束之后, 吞吐量是这样的
如图所示, 吞吐量波动巨大, 完全不正常. 现在我们需要去观察一下服务器了
mpstat -P ALL 1* 先看一下 CPU 的运行情况
可以发现 CPU 的利用率呈现一种阶梯式递增的趋势, 但是负载却不高, 说明 CPU 运行的问题不大
jstat -gcutil 1 1000 观察一下内存 gc 的情况
老年代内存空间不足了, 所以导致新生代的对象进不来, 频繁 fullgc,fullgc 的时间又会很长, 所以吞吐量一直上不去
检查 jvm 的内存空间配置
堆区总共只有 1g 的内存, 几乎全部分给了新生代, 导致老年代只有 5M 的可怜空间
修改内存配置
现在来修改一下内存参数, 再加入一个并行回收的机制
再次运行脚本, 观察 TPS 和 gc 频率
这次运行, fullgc 的频率变得很低了, 而且吞吐量也比较平稳, 没有什么大的波动. 但是运行到一分半钟的时候, 吞吐量出现了塌方式的下降, 同时出现了异常.
观察异常日志, 发现超过了 tomcat 最大连接数了
** 修改 tomcat 连接数配置, 再次运行脚本
这次不像刚刚那要大面积报错了, 但是依然有一些异常出现. 有一部分是超时, 还有一部分是 Software caused connection abort: recv failed
调整一下请求的连接方式, 使用 java 模式, 并保持长连接, 再观察运行结果
这次一个报错的都没有了!
来源: https://www.cnblogs.com/Zfc-Cjk/p/12204061.html