Linux: OOM Killer invoked
Linuxでメモリ不足によりプロセスが強制終了された場合の原因と解決策
概要
Linuxシステムがメモリ不足に陥った際、OOM Killerがプロセスを強制終了するエラーです。
エラーメッセージ
``` Out of memory: Kill process 12345 (java) score 900 or sacrifice child Killed process 12345 (java) total-vm:2048000kB, anon-rss:1500000kB ```
原因
- メモリリーク: アプリケーションのバグ
- メモリ不足: 物理メモリが足りない
- Swapの不足/無効: スワップ領域がない
- メモリ制限 (cgroups): コンテナのメモリ制限
解決策
1. OOM発生を確認
```bash
dmesg でOOMログを確認
dmesg | grep -i “out of memory” dmesg | grep -i “oom”
journalctl で確認
journalctl -k | grep -i oom ```
2. メモリ使用状況を確認
```bash
リアルタイム監視
top -o %MEM
メモリ使用量の確認
free -h
プロセスごとのメモリ使用量
ps aux –sort=-%mem | head -20 ```
3. OOM scoreを調整
```bash
特定プロセスを保護 (-1000 で対象外)
echo -1000 > /proc/$(pidof important-process)/oom_score_adj
優先的に終了させる
echo 1000 > /proc/$(pidof dispensable-process)/oom_score_adj ```
4. Swapを追加
```bash
スワップファイルを作成
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
永続化 (/etc/fstab)
/swapfile none swap sw 0 0 ```
5. アプリケーションのメモリ制限
```bash
JVMのヒープ制限
java -Xmx2g -Xms1g -jar app.jar
Node.js のメモリ制限
node –max-old-space-size=2048 app.js ```
6. systemd でメモリ制限
```ini
/etc/systemd/system/myapp.service
[Service] MemoryMax=2G MemoryHigh=1.5G ```
よくある間違い
- OOM発生を見逃す
- swap=0 でメモリ制限なしのコンテナ運用
- メモリリークを放置
関連エラー
関連エラー
Linux の他のエラー
この記事は役に立ちましたか?