應用部署在Linux環境下,如果出現未知原因導致應用進程被殺(應用日志中沒有任何異常現象,日志出現中斷現象),如果對于進程消失原因沒有特別明確的方向,可以考慮從系統日志(/var/log/messages)方面查找原因。?命令參考
egrep -i 'killed process' /var/log/messages
## 或:
egrep -i -r 'killed process' /var/log
## 或:
journalctl -xb | egrep -i 'killed process'
## 或:
dmesg | egrep -i -B100 'killed process'
## 或:
cat /var/log/messages | grep Kill
日志示例
[root@abc bin]# dmesg | egrep -i -B100 ‘killed process’
……
省略部分日志
……
[5979106.650296] Out of memory: Kill process 1392 (java) score 892 or sacrifice child
[5979106.650361] Killed process 1392 (java) total-vm:3794656kB, anon-rss:1727856kB, file-rss:0kB
[root@abc bin]# egrep -i ‘killed process’ /var/log/messages
Oct 16 22:06:39 iZm5e3cpdh44ekrxg7q4nzZ kernel: Killed process 1392 (java) total-vm:3794656kB, anon-rss:1727856kB, file-rss:0kB
說明
通常在多應用集中部署在一臺機器上,管理不當或應用壓力突增情況下容易出現該問題,Linux系統在內存不足等條件下會主動干預進程(OOM-Killer機制)。在多實例應用部署時,需要注意對內存的分配。
二、可能系統重啟造成進程沒了
最近發現每隔一段時間,某一臺機器線上的服務總是掛掉,進程直接就消失了,通過執行last reboot查看機器最近都什么時間是否重啟過,發現機器竟然有好多重啟記錄。
提供幾種最簡便的查看上一次系統的啟動時間或者系統到現在已經運行了多長時間:
1.who命令:
2.last reboot命令
3.top命令:
系統啟動到現在運行了多長時間,來推斷重啟是在哪一天
4.uptime命令:
跟top是一樣的
5.w命令
跟top也是一樣的