结合项目说下压测/调优
项目压测,CPU 占用比较大,除了测试服务器本身的性能影响外,还存在项目本身的问题。这是服务器的配置:

4 core, 8G, 磁盘 50g,作为一个高峰期并发不到 1000 的项目,总的来说这个配置还能用。然后并发刚到 30,就这样了:

最下面两条的是两台服务器内存。粉色的是项目所在服务器的 CPU,蓝色是 DB CPU,项目占用 CPU 飙的太狠,所以展开调查。
压测调优步骤
压测,将 ramp up 时间弄得稍微长一点。项目是 Docker 服务,JDK 版本 1.8。
docker exec -it id bash:进入容器。需要进入容器操作jstack命令jps -l:查看 Java 服务 PID,当然容器内部就一个服务包和 OpenJDKjstack -l pid >> /opt/xxx.txt:将堆栈信息打出来- 通过
jstat -gcutil pid查看 M 的值,即 MetaSpace 区使用率 - 通过
jstat -gc pid 2s(间隔时间) 3(持续次数)命令查看 MU/MC 即 Meta 区的使用率 - 使用
jstat -gccause pid观察 CMS FGC - 通过
jinfo pid得到具体信息 - 通过
jinfo -flag <参数> pid得到此参数信息
利用 GCeasy 分析堆栈信息
GCeasy: 利用好这个网站,这个网站可以将你的堆栈信息解压并分析,基本堆栈信息里就四种状态:WAITING、TIME_WAITING、RUNNABLE、BLOCKED。
RUNNABLE属于正常信息,可以忽略- 如果
WAITING和TIME_WAITING的信息过多也需要注意,这个是否正常就要结合场景看下了 - 最后是
BLOCKED,BLOCKED是阻塞状态的信息。这种是不正常的,一定要解决的
这次项目压测遇到的就是这种问题。项目延伸用了 Prometheus 监控,里面写的一个拦截器出现延迟加载的现象。最后处理掉了,解决了此次问题。当然还有些 waiting 的,是一个验证类,每次请求都重新构建一次,把它提出来之后 log 没这种提示了。
这是 GCeasy 的网址:https://gceasy.io/,选 tool,把堆栈信息日志打成 zip 格式,点 analyze,它会自动解析那些日志。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!