Linux

プロセスがメモリ使ってないけどサーバのメモリが枯渇してしまった際の教訓と反省

More than 1 year has passed since last update.

結論:

偉大な先人が地雷を踏み抜いていてくれた。

プロセスのメモリ使用量が少ないのにメモリ使用量が増加していた時に調査、対応したこと

解決策なども詳細に書かれているので同じことを書く必要性を感じないので省きます。

現象としてはpsコマンドなどでメモリの使用量を確認したが特にメモリを圧迫するようなプロセスは見当たらないのに間違いなくメモリの使用量が圧迫されていました。
実際にはslabの消費量がとんでもないサイズになっており、これがメモリを圧迫していたということになります。

当初の推測

当初アプリケーション側の実装でメモリリークしているか、アプリケーション側でキャッシュしているデータサイズが解放される量 < 蓄積される量 になってしまっており圧迫しているのか?と考えていました。

実際、インスタンス立ち上げ後から徐々にメモリの使用量が増加傾向にあり、ここ最近はほぼ横ばいであったことから急激なメモリ枯渇ではなく緩やかなメモリ枯渇だと考えたからです。

反省点:

topコマンドとfreeコマンドでメモリの使用量などは確認していたのですがプロセスが使用しているメモリ量に問題がないことが明らかだったため/proc/meminfoを確認することを省いてしまいました。
これこそが今回の障害の原因に気づくのが遅れた最大の原因であり、反省点です。

プロセスのメモリに問題がないから/proc/meminfoをみても同じだろうと思い、省略してしまい何か別の原因があるのだと思いこんでしまいました。

「推測するな、計測せよ!」の原則はどのようなときでも行わなければいけませんね。

教訓

障害対応時は愚直さこそが正義。
きちんと調べるべきことを調べて計測した結果のみにフォーカスする。
推測は最後の手段。