最終更新日 2025年9月10日

本記事の要点
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セキュリティスペシャリストなどの資格を保有しています。

