MeWrite Docs

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 ```

原因

  1. メモリリーク: アプリケーションのバグ
  2. メモリ不足: 物理メモリが足りない
  3. Swapの不足/無効: スワップ領域がない
  4. メモリ制限 (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 の他のエラー

最終更新: 2025-12-10