内存不足导致的耗时增大
给项目添加新功能,功能比较简单,就是对数据做打分过滤等操作,上线后发现CPU使用率明显上升,线程cpu使用率不均衡,有线程cpu使用率会达到100%
top -H命令查看到的
根据日志发现,服务耗时明显增大,由于是对每一条数据进行操作,数据量每天在千万以上,开始考虑是CPU资源不足导致,申请增加CPU资源。
增加以后,监控发现,CPU消耗和服务耗时没有明显改善。
通过ps -ef|grep pid发现,在启动时指定了jvm参数:
-Xms4g -Xmx4g -Xmn2g -Xss1024K
指定了堆内存时4G,其中新生代占2G.
登录到服务器,使用jvm命令监控,看到
使用 jstat -gc 865查看到
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
209664.0 209664.0 0.0 182199.5 1677824.0 1396223.0 3145728.0 1355282.2 93968.0 93050.3 14492.0 14329.5 45 3.257 2 0.219 3.476
- S0C:第一个幸存区的大小
- S1C:第二个幸存区的大小
- S0U:第一个幸存区的使用大小
- S1U:第二个幸存区的使用大小
- EC:伊甸园区的大小
- EU:伊甸园区的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
发现老年代使用率超过90%,并且FGC回收比较频繁,考虑代码中是否使用了大量的内存缓存,拼接字符串,static变量,大对象等,感觉并无导致老年代暴增的因素,考虑扩大内存。
申请内存资源后,发现任然没有改善,再次使用ps -ef|grep pid,发现指定了jvm参数
-Xms4g -Xmx4g -Xmn2g -Xss1024K
修改jvm参数重启后,监控,服务cpu和耗时均回复正常。