サーバーがあり、free
出力は次のとおりです。
root@server:~# free -h
total used free shared buff/cache available
Mem: 31G 903M 22G 7.7G 8.2G 22G
Swap: 975M 38M 937M
このサーバーは、まったく負荷がなく、負荷平均が0.00のSSHなど、いくつかのサービスのみを実行しながら、完全にアイドル状態です。クリアバッファを使ってみましたが、sync; echo 3 > /proc/sys/vm/drop_caches
バッファがダウンしていますが、ご覧のとおり、まだ8.2Gを使用しています。
合計31Gのうち1Gのみを使用し、22Gしか使用できないのはなぜですか? OOMハーベスタはより多くのメモリを要求するプロセスを終了するため、カーネルは実際には22G以上の空き容量を提供できないようです。しかし、その理由は何ですか?
カーネルバージョンでUbuntu 18.04サーバーを実行しています4.15.0-24-generic
答え1
いいですね。状況はここで説明されているものと似ています。https://serverfault.com/questions/288319/linux-not-freeing-large-disk-cache-when-memory-demand-goes-up
私の場合は、lsof
postgresqlクエリログファイルが276Mと疑われました。私はまた、postgresqlの共有バッファがそれに関連している可能性があることをここで読みました。https://serverfault.com/questions/515125/oom-despite-available-memory-cache/856010#856010
postgresqlサービスを再起動できますが、バッファ/キャッシュが7.5G減少しました。本番環境では、これらの応答をさらに詳しく調べることができます。