一度は何も言わずに服を止める(OOM Killer)


朝、サイトにアクセスできないことに気づき、ステータスコードを表示します.502です.つまり、負荷バックエンドのアプリケーション停止であることがわかります.サーバーにログインし、プロセスが存在しないことを確認します.アプリケーションログをチェックしても異常はなく、なぜプロセスが停止したのか不思議です.
/var/log/messageを表示すると、次の情報が表示されます.
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
......
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15324]     0 15324    38678      328      79        0             0 sshd
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15328]     0 15328    18062      210      39        0             0 sftp-server
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15775]     0 15775   588027    91836     240        0             0 java
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15822]     0 15822    38711      405      81        0             0 sshd
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15879]     0 15879    45594      249      46        0             0 crond
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15881]     0 15881    28296       66      11        0             0 run-parts
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15893]     0 15893   156948    53661     229        0             0 yum-cron
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15894]     0 15894    28386       36      12        0             0 awk
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: Out of memory: Kill process 15775 (java) score 352 or sacrifice child
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: Killed process 15775 (java), UID 0, total-vm:2352108kB, anon-rss:366108kB, file-rss:1236kB, shmem-rss:0kB

Linuxカーネルをトリガした「Out Of Memory killer」メカニズムのようです.
残りのメモリ容量のサイズが低すぎると、OOM killerはプロセス強制killを選択します.
キルプロセスの選択は主に2点に基づいています.
  • kill最も多くのメモリを解放できます.
  • はシステムにとってkillの影響が最も小さい.

  • 実際の操作では、カーネルはプロセスごとにoom_を維持します.score値.値が高いほど、OOM Killerによって選択される可能性があります.現在は基本的にメモリ使用量です.
    $ cat /proc/pid/oom_score
    

    プロセスがkillされたくない場合は、メソッドのoom_を変更します.score_adj値.-1000に設定すると、OOM Killerはこのプロセスを無視します.
    sudo echo -1000 > /proc/pid/oom_score_adj
    

    または、サービスユニットの変更
    [Service]
    OOMScoreAdjust=-1000
    

    もちろんこの2つの方法はかなり爽やかではありません.
    このとき、ECSメモリは1 Gしかありません.
    何?1 Gしか配置されていません...プログラムにメモリ漏れがないことを確認した後、セットは4 Gにアップグレードした.問題が解決する.