Linux服务器Java进程突然消失了
- 1、问题
- 2、排查
- 3、解决
- 4、其他命令
- 4.1、使用 grep 命令查看特定进程的内存占用
- 4.2、使用 top 命令实时监控进程内存占用
- 4.3、结合使用 grep 和 top 命令
1、问题
项目在生产环境一直稳定的运行,突然业务反馈系统宕机了。于是紧急排查系统,发现JAVA进程没了。
重启项目,恢复正常。
过了两天,又出现了相同的情况。
2、排查
- 1、结合现象分析,大概率发生了OOM。
- 2、因为项目不是部署在物理机上,云端服务器,也有可能存在波动导致进程被挤掉。但是反复出现宕机,可以排除此情况。
顺着OOM的思路排查
查看java进程数据
dmesg | grep java
查看被系统杀死的进程
dmesg | egrep -i 'killed process'
发现Java应用确实被 kill 了,内存占用接近7G,系统内存才只有8G。
查看OOM
dmesg -T | grep 'Out of memory'
可以看到确实是发生了OOM,内存占用过高被Linux杀掉进程。
3、解决
大概率是某个查询条件没有限制,从而导出查询出来大量的数据,操作的人员多的情况,就会在短时间内消耗大量内存。
可参考:内存溢出的处理方式及问题背后的思考:https://blog.csdn.net/qq_38254635/article/details/121175518
找到对应的实例,反向查找实例对应的一些接口,逐一排查是否存在大量实例查询的情况。
如以上未解决问题,或不存在实例过多的问题,可采用如下方式:
- 1、调整JVM配置,官方建议是机器物理内存的60%。 java -jar -Xmx
- 2、增加物理机内存
4、其他命令
4.1、使用 grep 命令查看特定进程的内存占用
在 Linux 中,每个进程都有一个对应的 status 文件,其中包含了关于该进程的状态信息。我们可以通过 grep 命令从该文件中提取特定的内存信息,例如 VmRSS(表示该进程实际使用的物理内存)。
grep VmRSS /proc/16763/status
输出
VmRSS: 5934312 kB
- /proc/16763/status 是进程 ID 为 16763 的进程的状态文件路径。你需要将 16763 替换为你要查看的进程的实际 PID。
- VmRSS(Virtual Memory Resident Set Size)表示进程实际占用的物理内存大小。
4.2、使用 top 命令实时监控进程内存占用
top 命令是 Linux 系统中用于实时监控系统资源使用情况的工具。通过 top 命令,我们可以查看系统中各个进程的 CPU 和内存使用情况。
top -p 16763
- -p 16763 参数指定 top 命令只显示 PID 为 16763 的进程信息。同样,你需要将 16763 替换为你要查看的进程的实际 PID。
top 命令会实时显示进程的 CPU 和内存使用情况,更新频率通常为每 3 秒一次。输出信息中,%MEM 列表示进程占用的内存比例,RES 列表示进程实际使用的物理内存大小。
4.3、结合使用 grep 和 top 命令
在某些情况下,你可能希望通过 top 命令获取特定进程的实时内存占用情况,而不需要监控整个系统的所有进程。可以使用 grep 命令与 top 命令结合,实现这一目的。
top -b -n 1 | grep 16763
- -b:以批处理模式运行 top,输出结果可用于管道处理。
- -n 1:只刷新一次 top 的结果。
- grep 16763:筛选出 PID 为 16763 的进程信息。
- 该命令会输出 top 命令的结果中包含进程 ID 16763 的所有行,显示该进程的 CPU 和内存使用情况。
OK,就这些吧。
有什么不对的还望指正,书写不易,觉得有帮助就点个赞吧!☺☺☺
参考链接:https://www.jianshu.com/p/9201db2d8ee4
https://blog.csdn.net/qq_43445867/article/details/141136451