情况:
项目的导出导入功能突然用不了了,但是服务方(导入导出单独拆分出来了一个数据处理服务)重启后就又可以用了。
客户端调用rpc服务时,调用前的log有打印,但是打印后(调用服务后)就没有下文直接卡住了(还好是异步操作不影响主流程),客户端无报错。
服务方没有发现请求log,也就是说,请求没有打到服务方上来。
但是项目一直稳定运行,且最近也没上线无变动,
也查了下客户端调用的服务方ip,无误
后来ps -aux | grep java看了下-Xms(初始堆大小)和-Xmx(最大堆大小)都是2G(公司的服务管理平台中的服务不配置jvm参数的话默认2G,我们服务由服务管理平台管理),但是服务实例的内存申请了10G,于是猜想是不是内存不够用了,
然后jstat -gcutil 进程号 线程号 命令查看资源使用情况,发现FGC次数有点高,修改了内存大小之后再重启服务,FGC次数大幅度减少。
环境:jdk1.8
附:用到的jstat命令(后文有命令详情)
jstat参数
\*C => (Capacity)区容量
\*U => (Used)使用量
- jstat -gcutil pid 总结垃圾回收统计
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
- jstat -gc pid 垃圾回收统计
- S0C:第一个幸存区的大小
- S1C:第二个幸存区的大小
- S0U:第一个幸存区的使用大小
- S1U:第二个幸存区的使用大小
- EC:伊甸园区的大小
- EU:伊甸园区的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
参考文档
jstat参数详解:
https://cloud.tencent.com/developer/article/1158596
https://www.cnblogs.com/yjd_hycf_space/p/7755633.html
JVM内存结构:
https://www.cnblogs.com/ityouknow/p/5610232.html
jstack堆栈追踪工具
https://www.cnblogs.com/kongzhongqijing/articles/3630264.html
项目中的导出导入功能出现问题,调用RPC服务后客户端卡住,服务方未收到请求。检查发现JVM内存设置与实际需求不符,FGC频繁。通过调整-Xms和-Xmx参数,减少FGC次数,问题得到解决。环境为JDK1.8,使用jstat等工具进行监控和诊断。

6673

被折叠的 条评论
为什么被折叠?



