一、查詢系統日志
grep -i "java" /var/log/messages
執行這條命令,檢查系統日志里是否有 Java 進程被 OOM Killer 殺死的記錄。
日志中反復出現以下內容:
Out of memory: Killed process 3679325 (java) total-vm:2947000kB, anon-rss:406604kB...?
Out of memory: Killed process:明確表示 Java 進程因內存不足被系統強制終止;
total-vm:進程申請的虛擬內存總量(約 2.9GB);
anon-rss:進程實際使用的物理內存(約 400MB 左右);
UID:0:以 root 用戶運行,權限足夠但內存仍不足。?
問題根源:
你的服務器總內存只有?1.8Gi(
free -h
?結果),而:
- Java 進程內存需求高:即使單個 Java 進程實際占用~400MB 物理內存,但虛擬內存申請量高達~2.9GB,疊加系統其他進程(如內核、SSH、日志服務等),總內存會被快速耗盡;
- 無 Swap 分區:
free -h
?顯示?Swap: 0B
,內存不足時無法通過交換空間緩解,系統只能直接殺死進程。
解決方案:
1.?緊急緩解:添加 Swap 分區
臨時創建 Swap 文件,讓系統內存不足時有緩沖空間(避免頻繁 OOM 殺進程):?
# 1. 創建 1GB Swap 文件(根據實際情況調整大小,如 2G 則改為 count=2048)
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024# 2. 設置文件權限(安全必須)
sudo chmod 600 /swapfile# 3. 格式化 Swap 文件
sudo mkswap /swapfile# 4. 啟用 Swap
sudo swapon /swapfile# 5. 設置開機自動掛載(避免重啟后失效)
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
驗證:執行 free -h,看到 Swap 行有值(如 1.0Gi)則成功。
?