freeではなくavailableを見る
Linuxは使われていないメモリをディスクキャッシュに利用するため、正常なサーバーで空きメモリが少ないのは普通です。available列は、swapを使わずに新しい処理へ割り当てられるメモリ量をカーネルが推定したものです。注目すべきなのはこの値です。usedの正確な計算方法はツールのバージョンによって異なるため、異なるシステム間で比較しないでください。
free -h
grep -E 'MemAvailable|Shmem:|SReclaimable' /proc/meminfoキャッシュのうち解放できるものとできないもの
ページキャッシュは通常、アプリケーションがメモリを必要とするときに解放できます。共有メモリとtmpfs(Shmem)もcacheに含まれますが、ディスクにコピーがないデータを保持しているため、単純に破棄することはできません。そのため、キャッシュが大きいのに利用可能メモリが少ない場合、tmpfsや共有メモリセグメントが大きいことがよくあります。
df -h -t tmpfs
sudo slabtop -o | head -15swapの使用自体は問題とは限らない
使用頻度の低いページをサーバーが何週間もswapに置いたままでも、支障がないことがあります。問題なのは継続的な出し入れです。vmstatのsi列とso列を確認してください。値がゼロを超えたままなら、システムが継続的にswapへの書き出しや読み戻しを行っており、実際のメモリ不足の兆候です。
swapon --show
vmstat 1 5メモリの使用元を調べる
プロセスを常駐メモリ量で並べ替えます。RSSはプロセス間で共有されるページを各プロセスに計上するため、複数プロセスの値を単純に合計することはできません。smemなどPSSに対応したツールがインストールされていれば、より適切な合計が得られます。
ps -eo pid,user,rss,comm --sort=-rss | head -15本当のメモリ不足を見分ける
兆候は、利用可能メモリの少なさ、継続的なswapへの出し入れ、out-of-memory killerによるプロセスの強制終了です。カーネルログを確認してください。数値をよく見せるためにdrop_cachesを実行しないでください。サーバーにディスクからの再読み込みを強いるだけで、何も解決しません。
sudo journalctl -k --no-pager | grep -iE 'out of memory|oom-kill'CH-J Server Managerのメモリ表示
System MonitorはSSH経由でこれらの値を読み取ります。LinuxではusedをMemTotal − MemFree − Buffers − Cached − SReclaimableと定義し、availableにはカーネルの推定値を使います。共有メモリはCachedに含まれ、解放できません。バーの各分類は重複しません。計算式が一部のバージョンのfreeとは異なるため、数値が完全には一致しない場合があります。swapとその使用履歴も表示します。ZFS ARCは別扱いされないため、ZFSホストでは使用済みメモリとして計上されます。