【OOM】 Linux OS OOM VS JVM OOM

1 错误日志定位—-已读服务provider下线

已读服务被下线:

2 应急解决方案:

保存一台机器的gc.log 日志文件,线程其他日志文件等;然后重启服务

3 查看下线原因:

  • 机器情况 物理内存8G启动了两个java进程

  • 1 通过gc日志排除vm内存泄露; 下图

  • 2 egrep -i “killed process” /var/log/messages -C100 OR dmesg -T | grep java -C100 确认是否是被Linux OS killer 掉 上面第二章图,确实是被OSkill

  • 3 可疑的进程 DNF拉取元数据更新 (只是可疑,最近其中2台机器都是运行dnf期间,OS 发生 OOM,导致只剩下一个provider,最终抗住不)

  • 4 计算OOM 前实际内存占用

  • 2240+498+225+96+487+215+36+38+224+231+1808+137+698+429+397+632+3703+321+235+511+228+51+28+34+90+2305+328+715+410+2691+380+8699+563135+1249532+2112+82+594+86+86+25797+20+24+35+12451+5803+16+22=1888915*4kb=7.2G java两个进程+所有的其他进程占用 rss总共7.2G应该还有700M的内存空间,这里就需要问google了,基本上没有能解释清楚的。

4 解决方案

  • 1 执行下面的命令关闭并禁用掉这个dnf定时器。
  • systemctl stop dnf-makecache.timer
  • systemctl disable dnf-makecache.timer
  • 2 机器内存升级
  • 3 (已有业务报警)

5 小结&参考

  • **根本原因:**当 Linux 系统内存不足时,系统会把当前系统占用系统内存过高的进程当做流氓进程,然后系统发出信号将这个流氓进程杀掉,最后导致 Java 应用服务不能使用
  • dnf 相关命令 www.howtoforge.com/tutorial/ce…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享