记一次jvm oom 导致docker容器频繁重启问题排查
应用部署在docker容器中,日志无报错,docker却有多次重启记录,Nginx监控报警
过程:
1.执行top命令查看内存占用情况
很干净的容器,只有java进程在运行
2.查看jvm情况
2.1 查看heap堆大小,可以使用jinfo -flags PID 查看
或者使用jmap -heap PID 查看结果更清晰些
2.2 查看垃圾回收情况jstat -gcutil PID [3s] 每三秒打印一次
修改启动参数-Xmn 2048m 一般为heap堆大小的1/2或者1/4
常用启动参数 -server -Xmx4000m -Xms1500m -Xmn1024m
不生效,导出堆文件。使用mat分析内存文件,查看是什么对象,占有内存。http://www.eclipse.org/mat/downloads.php
本次是因为session超时设置为1天,且内网安全扫描,会生成大量session,导致大量session不过期,内存占用一直增加。
将session调整为30min后,解决问题。