问题描述
后端设备:4台tomcat服务器(启动参数 -Xms8192m -Xmx8192m),负载均衡服务器:1台nginx负载均衡服务器
试用jemter进行并发性能测试,发现nginx服务器的并发只有200,远低于tomcat单机性能,而且在刚重启时,性能还可以,经常一段时间性能测试后,并发会下降到50
问题的原因
java内存被占满,一直在进行垃圾回收,网站反应变慢
问题调查
1. 查看nginx配置是否有问题
通过只部署tomcat,不部署网站发现,nginx的负载均衡配置没有问题,可以正常进行负载。
2. 查看jvm垃圾回收情况
通过Arthas工具对jvm进行监控发现,在性能测试过程中,堆内存一直在上升,一直占满了8G后,GC并没有进行垃圾回收,老年代内存占用率达到99%。
也可以使用jstat -gcutil pid 查看垃圾回收情况和堆内存占用情况
通过jmap -histo:live pid | head -20来查看内存中的大对象,发现有很多自己写的对象常驻内存。经过调查代码发现是因为开启了jvm缓存,将用户的请求结果缓存到了内存,所以出现了内存被占满的情况。