设备服务只要导出文件,就报503,查看K8S发现服务重启
- 1. 复现问题
- 1.1 问题复现
- 频繁fullGC
- 宿主pod
- 服务日志监控
- 1.2 小内存复现
接口没啥问题,导出就会导致服务重启
1. 复现问题
当前uat环境配置:
pod内存:2G
JVM参数:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Xms1024m -Xmx1024m -Xss256K -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8
内存限制1G
1.1 问题复现
频繁fullGC
由上图可以看到老年代增加到570M左右,稳定不变,fullGC每分钟5-6次。
youngGC每分钟75次左右。
问题就是fullGC频率太高,理论来说fullGC应该控制到0
宿主pod
可以看到宿主pod的情况是稳定的,只有cpu跑满了。
这是正常的,因此每秒10次导入,需要发送大量的http请求,读取数据库,以及各种数据的处理
服务日志监控
看日志,功能是正常的,也没有报错以及重启。
分析
看老年代,新生代的次数、以及每次gc的时间,以及jvm堆内存。
猜想:
新生代有大量的大对象需要回收,但是新生代太小,GC的时候,将这些大对象放入到了老年代。
因此造成了ygc的时候也慢。
老年代也增加
同时老年代的gc时间也增加。
1.2 小内存复现
环境:
jvm参数:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Xms512m -Xmx512m -Xss256K -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8
现在基本只有老年代的gc了。