最終更新日 2025年3月6日

本記事の要点
freeコマンドの基本構文
free [オプション]
freeコマンドでよく使用するオプション
オプション | 説明 |
---|---|
free | メモリの使用状況を表示 |
free -b | バイト単位で表示 |
free -k | キロバイト単位で表示(デフォルト) |
free -m | メガバイト単位で表示 |
free -g | ギガバイト単位で表示 |
free -h | 可読性の高い単位(KB, MB, GB)で表示 |
free -s [秒] | 指定した秒数ごとに情報を更新して表示 |
free -t | 合計メモリ情報を表示 |
free -c [回数] | 指定した回数分の出力を表示 |
free -l | 詳細なメモリ情報(Low, High メモリ)を表示 |
free -w | カラム幅を広くしてスワップメモリの詳細を表示 |
freeの出力結果の意味
実行コマンド
free -h
出力結果
total used free shared buff/cache available
Mem: 16Gi 8Gi 4Gi 500Mi 4Gi 10Gi
Swap: 8Gi 100Mi 7.9Gi
項目 | 意味 |
---|---|
total | 合計メモリ量 |
used | 使用中のメモリ量 |
free | 未使用のメモリ量 |
shared | tmpfs などで共有されているメモリ |
buff/cache | バッファやキャッシュとして使用されているメモリ |
available | 実際に使用可能なメモリ量 |
Swap total | スワップ領域の合計 |
Swap used | 使用中のスワップ領域 |
Swap free | 未使用のスワップ領域 |
Linux freeコマンドとは?基本概要とできること
Linuxのfree
コマンドは、システムのメモリ使用状況を確認するためのコマンドです。現在の空きメモリ量や、使用中のメモリ、キャッシュされているメモリ量などを簡単に確認できるため、サーバーのパフォーマンス監視やメモリ不足のトラブルシューティングに役立ちます。
メモリの使用状況を素早く把握できるため、Linuxサーバー運用において必須のコマンドの一つです。特に、パフォーマンスの低下が発生した際や、メモリリークの疑いがある場合には、free
コマンドでメモリの状態を確認することで、原因の特定がしやすくなります。

freeコマンドで確認できるメモリ情報とは?
free
コマンドを実行すると、次のような出力が得られます。
$ free -m
total used free shared buff/cache available
Mem: 16000 8000 2000 1000 6000 7000
Swap: 2000 500 1500
この出力の各項目の意味は以下の通りです。
- total:物理メモリ(RAM)の合計サイズ
- used:実際に使用されているメモリ量
- free:完全に未使用のメモリ量
- shared:共有メモリ(主にtmpfsや一部のアプリケーションで利用)
- buff/cache:ディスクキャッシュやバッファとして使用されているメモリ
- available:実際に新しくアプリケーションが利用可能なメモリ量
- Swap:スワップ領域の合計、使用済み、空き領域
特に「used」と「available」の違いを理解することが重要です。

used
の値を見ると、ほとんどのメモリが使われているように見えますが、これは問題ないのでしょうか?

Linuxでは、メモリを効率的に使うために、空きメモリをディスクキャッシュとして活用する仕組みがあるんだ。だから、used
の値が大きくても、available
の値が十分にあれば、メモリが不足しているわけではないよ。

じゃあ、free
の値が少なくても気にしなくていいんですか?

そうだね。free
の値が小さくても、available
の値が大きければ、新しいプロセスが問題なく動作できる。ただし、available
が極端に少なくなっている場合は、メモリ不足の兆候だから注意が必要だよ。

なぜfreeコマンドが重要なのか?(用途と活用例)
free
コマンドは、LinuxサーバーやPCのメモリ管理の状態をリアルタイムで把握するのに役立ちます。特に、以下のような場面で有効に活用できます。
1. メモリ不足の診断
サーバーの動作が遅い場合、free
コマンドでavailable
の値をチェックすることで、メモリが不足しているかどうかを判断できます。もしavailable
が極端に少なく、swap
の使用量が増えている場合は、メモリ不足が原因かもしれません。

サーバーのレスポンスが急に遅くなったんですが、何を確認すればいいですか?

まずはfree -m
でavailable
の値を見てみよう。もしavailable
が500MB以下で、swap
の使用量が増えていたら、メモリ不足が疑われるね。
2. メモリリークの検出
長時間稼働しているプロセスがメモリを解放せずに増加している場合、free
コマンドで定期的にメモリの使用量を監視すると、異常な増加を発見できます。

アプリケーションを再起動しないとどんどんメモリを消費するんですが、これってメモリリークですか?

可能性は高いね。watch -n 5 free -m
で定期的にメモリの使用状況をチェックして、used
の値が時間とともに増え続けるなら、メモリリークの疑いがある。
3. キャッシュメモリの影響確認
Linuxは未使用メモリをディスクキャッシュとして活用しますが、特定の状況ではキャッシュが溜まりすぎて、アプリケーションに割り当てられるメモリが不足することがあります。free
コマンドのbuff/cache
の値をチェックすることで、この影響を確認できます。

used
の値が多いけど、buff/cache
もかなり大きいですね。これは問題ですか?

buff/cache
は基本的にすぐに解放できるメモリだから、available
が十分にあるなら問題ないよ。ただし、buff/cache
が極端に増えてavailable
が減っている場合は、キャッシュが原因でメモリが逼迫している可能性があるね。

まとめ
free
コマンドは、Linuxのメモリ使用状況を素早く確認できる重要なコマンド。used
の値だけでなく、available
の値をチェックすることが重要。- メモリ不足の診断、メモリリークの検出、キャッシュメモリの影響確認など、様々な用途で活用できる。
watch free -m
を使って定期的に監視すると、異常を早期に発見できる。
このように、free
コマンドを適切に活用することで、Linuxサーバーのメモリ管理を最適化し、パフォーマンスを維持することができます。
Linux freeコマンドの基本的な使い方
free
コマンドは、Linuxシステムのメモリ使用状況を素早く確認するためのコマンドです。シンプルなコマンドながら、メモリの合計量や使用量、空き容量、キャッシュの状況などを一目で把握できるため、Linuxサーバーのパフォーマンス監視やメモリ不足の診断に不可欠です。

freeコマンドの基本構文と実行例
free
コマンドは、オプションなしでも利用できますが、見やすくするためにオプションを指定するのが一般的です。基本的な構文は以下の通りです。
free [オプション]
基本的な実行例
オプションなしで実行すると、バイト単位でメモリの使用状況が表示されます。
$ free
total used free shared buff/cache available
Mem: 16384000 8192000 2048000 512000 6144000 7168000
Swap: 2097152 524288 1572864
見やすくするため、-m
(MB単位)や-h
(自動単位変換)を指定するのが一般的です。
$ free -m # MB単位で表示
$ free -h # 読みやすい形式で表示

free
コマンドを実行したら、数値がバイト単位で表示されて見にくかったです。

その場合は-m
や-h
オプションをつけるといいよ。free -h
なら、GBやMB単位で自動変換してくれるから、直感的にメモリ状況を把握しやすい。
メモリの各項目(total, used, free, availableなど)の意味
free
コマンドの出力には、メモリ使用状況を示す複数の項目があります。それぞれの意味を正しく理解することが重要です。
メモリ(Mem:)の項目
項目 | 意味 |
---|---|
total | システムの総メモリ容量 |
used | 現在使用中のメモリ(buff/cacheを除く) |
free | 完全に未使用のメモリ |
shared | 他のプロセスと共有されているメモリ |
buff/cache | ディスクキャッシュやバッファとして確保されているメモリ |
available | 実際に新しいプロセスが使用可能なメモリ |

used
が大きいのですが、free
も少なくて、メモリが足りないんでしょうか?

Linuxはメモリを有効活用するために、空きメモリをキャッシュとして使う仕組みがあるんだ。used
の値だけで判断せず、available
の値を見るのがポイントだよ。
スワップ(Swap:)の項目
項目 | 意味 |
---|---|
total | スワップ領域の合計 |
used | 使用中のスワップ領域 |
free | 空きスワップ領域 |
スワップ領域が頻繁に使用されている場合、メモリ不足が疑われるため、監視が必要です。

swap
のused
が増えているんですが、これは問題ですか?

スワップが頻繁に使われていると、メモリ不足の兆候かもしれない。available
の値が低いなら、メモリ増設や不要なプロセスの整理を検討しよう。

どの数値を見れば良い?メモリ監視のポイント
メモリ使用状況を監視する際、重要なのは以下の数値です。
1. available の値を優先的にチェック
メモリが不足しているかどうかを判断するには、available
の値を最優先で確認します。available
が極端に少ないと、新しいプロセスがスムーズに動作できなくなる可能性があります。
$ free -m
total used free shared buff/cache available
Mem: 16000 8000 2000 1000 6000 7000

どの数値を見れば、メモリが足りているかわかりますか?

available
の値を見よう。これが低すぎると、新しいプロセスがメモリ不足で動かなくなる可能性がある。
2. swap の使用量をチェック
swap
が頻繁に使用されている場合は、メモリ不足が疑われるため、アプリケーションのメモリ消費量を確認する必要があります。

swap
の使用量が増えているのは良くないですか?

スワップが増えていると、物理メモリが足りなくなっている証拠かもしれない。top
やps aux --sort=-%mem
でメモリを消費しているプロセスを確認しよう。
3. buff/cache の影響を考慮する
buff/cache
は、ディスクキャッシュとして使用されているメモリですが、必要に応じて解放されるため、used
の値を見てメモリ不足と判断するのは誤りです。

used
が多いんですが、これは問題ないんですか?

Linuxは未使用メモリをキャッシュとして活用するから、used
だけを見てもダメだよ。available
が十分なら問題ない。

まとめ
free -m
またはfree -h
を使ってメモリの使用状況を確認する。available
の値を最優先でチェックし、メモリが不足していないか判断する。swap
の使用量が増えている場合は、メモリ不足の可能性がある。buff/cache
が大きくても、available
が十分なら問題なし。
このように、free
コマンドの各項目を正しく理解し、どの数値をチェックすべきかを押さえることで、メモリの監視やサーバー運用を効率的に行うことができます。
Linux freeコマンドのオプション一覧と詳細解説
free
コマンドは、オプションを組み合わせることで、より詳細なメモリ情報を取得できます。例えば、表示単位の変更やリアルタイム監視の設定が可能です。適切なオプションを使いこなすことで、サーバーのメモリ管理がより簡単になります。
- 単位を指定する (-b, -k, -m, -g)
- 読みやすいフォーマットで表示する (-h)
- 合計メモリを表示する (-t)
- 定期的にメモリ使用量を更新する (-s)
- 指定回数だけデータを表示する (-c)
- freeコマンドのオプションを活用した具体例
- まとめ

単位を指定する (-b, -k, -m, -g)
メモリの表示単位を指定するオプションです。デフォルトではキロバイト単位ですが、MBやGB単位で表示すると見やすくなります。
free -b # バイト単位
free -k # キロバイト単位(デフォルト)
free -m # メガバイト単位
free -g # ギガバイト単位

free
コマンドの結果がバイト単位で表示されていて、桁が多くて見にくいです。

-m
オプションを使うとMB単位で表示できて、直感的に把握しやすくなるよ。例えば、free -m
を使うと、物理メモリが何MB使われているかがわかりやすくなる。
読みやすいフォーマットで表示する (-h)
-h
オプションを使うと、MBやGB単位で自動的に表示され、数値が見やすくなります。
free -h

MBとかGBを指定しなくても、自動で単位を切り替える方法はありますか?

free -h
を使えば、自動で適切な単位(MBやGB)に変換してくれるよ。容量の大きなサーバーだとGB単位の方が見やすいから便利だね。
合計メモリを表示する (-t)
-t
オプションを使うと、物理メモリとスワップメモリの合計値が表示されます。
free -m -t

free
の出力に、メモリとスワップの合計がないんですが、まとめて確認する方法はありますか?

-t
オプションを使うと、メモリとスワップの合計値が表示されるよ。free -m -t
みたいに使うと、合計メモリ量を一目で確認できる。
定期的にメモリ使用量を更新する (-s)
-s
オプションを使うと、指定した間隔(秒数)ごとにメモリ使用状況を更新して表示できます。
free -m -s 5 # 5秒ごとにメモリ使用状況を更新

メモリ使用量の変化をリアルタイムで監視するにはどうすればいいですか?

free -s 5
を使えば、5秒ごとにメモリ状況が更新されるよ。負荷テスト時や、異常なメモリ消費が発生していないか監視するのに便利。
指定回数だけデータを表示する (-c)
-c
オプションを使うと、指定した回数だけメモリ情報を更新し、出力した後に終了します。
free -m -s 3 -c 5 # 3秒ごとに5回表示した後、終了

ずっと表示を続けるのではなく、一定回数だけ更新して終了する方法はありますか?

-c
オプションを使えば、指定回数だけ更新して終了できる。例えば、free -s 3 -c 5
なら、3秒ごとに5回更新して自動的に終了するよ。
freeコマンドのオプションを活用した具体例
1. free -m
を使って手軽にメモリ確認
MB単位でメモリの使用状況を確認する最も基本的な使い方です。
free -m

メモリの使用状況を、サーバーにログインするたびに確認したいんですが、簡単な方法はありますか?

.bashrc
にalias fm='free -m'
を追加しておくと、fm
と打つだけでMB単位のメモリ情報を確認できるよ。
2. watch free -h
でリアルタイム監視
一定間隔でfree
コマンドを実行し、メモリの変化をリアルタイムで監視できます。
watch -n 2 free -h # 2秒ごとにメモリ状況を更新

メモリ使用量の変化をリアルタイムで観察する方法はありますか?

watch -n 2 free -h
を実行すると、2秒ごとにメモリの状態が更新される。監視しながら、どのプロセスがメモリを消費しているかtop
と併用するといいね。
3. free -s 5
を使った定期的なメモリ監視
負荷テストやメモリリークの監視時に、一定間隔でメモリ使用状況を記録する場合に便利です。
free -m -s 5 > memory_log.txt # 5秒ごとに記録し、ファイルに保存

メモリ使用量を定期的に記録して、後で分析したいんですが、良い方法はありますか?

free -m -s 5 > memory_log.txt
を使えば、5秒ごとにメモリ使用量を記録できるよ。あとでログを確認すれば、どのタイミングでメモリが増えたのか分析しやすくなる。

まとめ
free
コマンドのオプションを活用することで、より詳細なメモリ情報を取得できる。-m
や-h
を使うと、見やすい単位でメモリ状況を表示できる。-s
オプションで定期的に更新し、-c
を併用すると一定回数で終了できる。watch
コマンドと組み合わせると、リアルタイムで監視可能。
適切なオプションを活用することで、Linuxのメモリ管理をより効率的に行うことができます。
Linuxのメモリ使用率を効率的に監視する方法
Linuxのメモリ使用率を効率的に監視するには、free
コマンドを定期的に実行し、記録・分析することが重要です。単発のチェックだけでは一時的な変動しか把握できないため、スクリプトやcron
を活用して自動監視することで、長期的なメモリ傾向や異常を検知できます。

定期的にfreeコマンドを実行する方法
free
コマンドはオプションを指定することで、一定間隔ごとにメモリ使用量を自動更新することが可能です。
リアルタイムでメモリ変化を監視
free -m -s 5
このコマンドは5秒ごとにメモリ使用状況を表示し続けます。手動で監視する場合に便利です。

メモリ使用率が急に増えるときがあるんですが、どうやって確認すればいいですか?

free -m -s 5
を使えば、5秒ごとにメモリ使用状況が更新されるから、メモリの変化をリアルタイムで観察できるよ。
watchコマンドを使った継続監視
watch -n 5 free -h
この方法では、2秒ごとにfree -h
の出力が更新されるため、視覚的にメモリの推移を確認できます。

ずっと画面を見ていないといけないのは不便ですね…

それならwatch
コマンドを使うといいよ。watch -n 5 free -h
を実行すれば、5秒ごとにメモリ情報が自動更新されるから、異常がないか継続的に確認できる
スクリプトを使ってメモリ使用量を記録する方法
メモリの使用量をログに記録し、後から分析するには、スクリプトを作成して定期的に実行するのが有効です。
ログ取得スクリプト
以下のシェルスクリプトを作成し、メモリ使用量を定期的に記録できます。
#!/bin/bash
LOGFILE="/var/log/memory_usage.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') $(free -m)" >> $LOGFILE
このスクリプトをcron
ジョブに登録すると、自動的にログが保存されます。

メモリ使用状況を後で分析するために、定期的にログを残したいんですが、どうすればいいですか?

上のスクリプトを使えば、実行するたびにmemory_usage.log
にメモリの状態を記録できる。これをcron
に設定すると、自動でログを取れるようになるよ。
アラート設定でメモリ不足を防ぐ(cron + free)
メモリ使用率が一定の閾値を超えた場合に、アラートを送信する仕組みを構築すると、障害発生前に対策が取れます。
閾値を設定してメール通知するスクリプト
以下のスクリプトを実行し、available
メモリが500MB未満になった場合にアラートメールを送ることができます。
#!/bin/bash
THRESHOLD=500
AVAILABLE_MEM=$(free -m | awk '/Mem:/ {print $7}')
if [ "$AVAILABLE_MEM" -lt "$THRESHOLD" ]; then
echo "Warning: Low memory! Available: ${AVAILABLE_MEM}MB" | mail -s "Memory Alert" admin@example.com
fi

メモリが足りなくなったら、自動的に通知を受け取る方法はありますか?

上のスクリプトをcron
に設定すれば、メモリが少なくなったときにメールで警告を送ることができるよ。
cronに登録して定期監視
スクリプトを定期的に実行するには、crontab
に以下の設定を追加します。
*/5 * * * * /path/to/memory_alert.sh
これにより、5分ごとにメモリ状況をチェックし、閾値を下回った場合にアラートを送信します。

スクリプトを定期的に実行するにはどうすればいいですか?

crontab -e
で編集して、上の設定を追加すれば、5分ごとに自動でスクリプトが実行されるよ。
まとめ
free -m -s 5
やwatch
コマンドを使うと、リアルタイムでメモリ使用量を監視できる。- シェルスクリプトを作成し、ログを定期的に記録すると、メモリの推移を後から分析できる。
cron
を活用して定期的にスクリプトを実行し、メモリ不足時にアラートを送ることで、障害を未然に防ぐことが可能。
このように、free
コマンドを効果的に活用し、スクリプトやcron
と組み合わせることで、Linuxのメモリ管理をより効率的に行うことができます。
Linux freeコマンドに関するよくある質問(FAQ)
free
コマンドの出力には、メモリの使用状況を示すさまざまな項目が含まれていますが、その意味を正しく理解することが重要です。特に「swap」「usedとavailableの違い」「cachedやbuffers」など、よくある疑問について解説します。
「free」の出力でswapが表示されるがこれは何?
free
コマンドの出力には、物理メモリ(RAM)とは別にSwap
の項目が表示されます。
Swapとは?
Swapは、物理メモリが不足した際に、一時的にディスク上の領域を仮想メモリとして使用する仕組みです。メモリ不足時にデータを退避できるため、システムの安定性向上に役立ちますが、ディスクI/Oが発生するため、使用量が増えるとパフォーマンスが低下します。
$ free -m
total used free shared buff/cache available
Mem: 16000 8000 2000 1000 6000 7000
Swap: 2000 500 1500

swapって何のためにあるんですか?RAMの代わりになりますか?

swapはメモリが不足したときの一時的な逃げ道だけど、RAMの代わりにはならないよ。swapが増えるとディスクI/Oが発生して、システムが遅くなるから、swapの使用量が増えてきたら対策を考えた方がいい。

swapの使用量を減らすにはどうすればいいですか?

まずは不要なプロセスを終了して、メモリの空きを増やす。それでも足りなければ、メモリを増設するか、swapの設定を調整するといい。

usedとavailableの違いは?どの値をチェックすれば良い?
free
コマンドの出力には、used
とavailable
の2つの項目があり、どちらを見るべきか混乱することがあります。
usedとavailableの違い
- used
実際にアプリケーションが使用しているメモリ量(ただし、バッファやキャッシュは含まない) - available
新しいプロセスが利用できるメモリ量(キャッシュされているメモリも含め、解放可能なメモリ)

used
の値が大きいとメモリが足りないってことですか?

違うよ。Linuxは未使用のメモリをキャッシュとして活用するから、used
が多くても問題ない場合が多い。available
の値をチェックして、これが少なくなってきたらメモリ不足を疑うべきだね。

じゃあ、available
の値が500MB以下になったらヤバいですか?

そうだね。available
が極端に減ると、swapが使われ始めて、システムの動作が遅くなる可能性がある。負荷の高いサーバーなら、1GB以上は確保した方がいい。

「cached」や「buffers」は何を意味するのか?
free
コマンドの出力には、buff/cache
という項目があります。これは、Linuxがディスクアクセスを高速化するために、未使用メモリをキャッシュとして活用している領域を示しています。
cachedとbuffersの違い
項目 | 意味 |
---|---|
buffers | ディスクI/O用のバッファ |
cached | ファイルキャッシュに使用されているメモリ |

buff/cache
が大きいんですが、これは問題ないですか?

問題ないよ。Linuxは未使用のメモリをキャッシュに活用するから、buff/cache
の値が大きくても正常な動作だよ。メモリが必要になったら、このキャッシュは自動的に解放される。

buff/cache
の値が大きすぎると、メモリが足りなくなることはありますか?

基本的にはないよ。でも、available
の値が少なくなってきたら、キャッシュをクリアすることでメモリを確保できる。sync; echo 3 > /proc/sys/vm/drop_caches
を実行すればキャッシュを手動で解放できるけど、通常は必要ない。

freeコマンドを使って「見えないメモリ消費」の正体を暴いた話
ある日、開発環境のテストサーバーが予告なく落ちる現象が発生しました。
ログには「Out of Memory(OOM)」の記録があるものの、top
コマンドではメモリを異常に消費しているプロセスが見当たりませんでした。
しかし、freeコマンドを使って詳しく調査すると、意外な原因が判明しました。
メモリが消えている?freeコマンドで異常を確認
まず、システムのメモリ使用状況を確認するためにfree -m
を実行しました。
free -m

先輩、OOM(Out of Memory)でサーバーが落ちたんですが、topコマンドではメモリを異常に使っているプロセスが見つかりません!

おかしいな…。free -m
でメモリの詳細を見てみよう。
実行結果
total used free shared buff/cache available
Mem: 7984 6000 50 12 1934 200
Swap: 2048 1024 1024

used
が6000MBで、available
が200MBしかないですね。でも、topではそんなにメモリを消費してるプロセスが見当たらないんですが…

この数値を見ると、プロセスが直接メモリを食っているわけではなく、カーネルが何かを保持している可能性がある。 buff/cache
の値が妙に大きいな…。
カーネルが握り続ける「消えないメモリ」
通常、Linuxは使用していないメモリをキャッシュとして再利用するため、メモリが足りなくなった場合には解放されます。
しかし、この環境ではメモリが解放されず、OOMが発生していました。

キャッシュって普通、メモリが足りなくなったら解放されますよね?

そうなんだが、特定のワークロードではカーネルがキャッシュを解放せず、メモリ不足になることがある。
この場合、drop_caches
を手動でクリアして、メモリが解放されるか確認してみよう。
echo 3 | sudo tee /proc/sys/vm/drop_caches

このコマンドって、何をしているんですか?

カーネルのキャッシュを手動でクリアするコマンドだ。1
ならページキャッシュ、2
ならdentryとinodeキャッシュ、3
ならすべてのキャッシュを解放する。
キャッシュをクリアした後、再びfree -m
を実行したところ、available
メモリが劇的に増加し、OOMが発生しなくなりました。

本当に解放された! available
メモリが増えてる!

この問題は、I/Oの激しい処理(ログの大量書き込みやバックアップ)をしていると、カーネルがキャッシュを持ち続けてしまうことがある。
メモリリークではなく、メモリが回収されない問題
この現象の原因はアプリケーションのメモリリークではなく、カーネルのキャッシュ管理によるメモリ保持でした
特に、rsyncや大規模なデータ処理を行うサーバーでは、この問題が発生しやすいです。

topコマンドだけ見てたら、絶対にこの問題に気づけなかったですね…!

そう。プロセスのメモリ使用量だけでなく、カーネルキャッシュの影響も考えるべき。

これ、定期的にキャッシュをクリアした方がいいんですか?

基本的には不要だが、サーバーが定期的にOOMを起こすなら、cronでキャッシュクリアを自動化するのもアリ。
echo "0 */6 * * * root echo 3 > /proc/sys/vm/drop_caches" | sudo tee -a /etc/crontab

なるほど! でも、これをやるとキャッシュのメリットがなくなりませんか?

確かに。だから、メモリが逼迫しているときだけ実行する仕組みを作るのが理想的。 free
コマンドの値を見て、閾値を超えたらキャッシュをクリアするスクリプトを組めばいい。
#!/bin/bash
THRESHOLD=100 # 閾値(MB)
AVAILABLE=$(free -m | awk '/Mem:/ {print $7}')
if [ "$AVAILABLE" -lt "$THRESHOLD" ]; then
echo 3 > /proc/sys/vm/drop_caches
echo "Cache cleared"
fi

このスクリプトをcronで実行すれば、OOMを防ぎつつキャッシュのメリットも維持できますね!
まとめ
- freeコマンドで「見えないメモリ消費(カーネルキャッシュ)」を特定できる。
- I/Oが多いサーバーでは、カーネルがキャッシュを解放しないことがあり、OOMを引き起こすことがある。
- 手動でキャッシュを解放するには
echo 3 > /proc/sys/vm/drop_caches
を使う。 - 定期的なキャッシュクリアはリスクがあるため、スクリプトでメモリ閾値を超えた場合のみ実行するのが理想。
サーバーがOOMを起こしたとき、単にプロセスのメモリ使用量を調べるだけでは「見えないメモリ消費」を見逃してしまう。
freeコマンドを活用し、キャッシュの挙動も含めてサーバーのメモリを正しく管理しよう。

ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。