ウェブサイト検索

Linux で RAM メモリ キャッシュ、バッファ、およびスワップをクリアする方法


他のオペレーティング システムと同様に、GNU/Linux はメモリ管理を効率的に、そしてそれ以上に実装しています。ただし、プロセスがメモリを消費しており、それをクリアしたい場合、Linux には RAM キャッシュをフラッシュまたはクリアする方法が用意されています。

この記事では、Linux システム上の RAM メモリ キャッシュ、バッファ、およびスワップ スペースをクリアして、全体的なパフォーマンスを向上させる方法について説明します。

RAM メモリ キャッシュ、バッファ、およびスワップ スペースについて

Linux システム上の RAM メモリ キャッシュ、バッファ、およびスワップ スペースを調べてみましょう。

RAMメモリキャッシュ

RAM メモリ キャッシュは、定期的にアクセスされるデータを保持するためにカーネルによって使用されるメカニズムです。これによりシステムの応答性が向上しますが、キャッシュが過負荷になると古いデータが保持され、パフォーマンスに影響を与える可能性があります。

バッファ

バッファはキャッシュと同様にデータを一時的に保持しますが、その目的は異なります。バッファは、CPU やハードディスクなどのコンポーネント間で転送されるデータを保存し、スムーズな通信を促進します。ただし、バッファリングされたデータが過剰になると、システムの速度が低下する可能性があります。

スワップスペース

スワップ スペースは、物理 RAM が使い果たされたときに仮想メモリとして機能する、ハード ディスク上に割り当てられた領域です。メモリ不足によるシステムのクラッシュは防止できますが、使いすぎるとシステムの速度が低下する可能性があります。

Linux でのキャッシュ、バッファ、およびスワップ領域のクリア

特定の状況では、以下で説明するようにキャッシュバッファ、またはスワップ スペースをクリアする必要がある場合があります。

LinuxでRAMメモリキャッシュをクリアする方法?

すべての Linux システムには、プロセスやサービスを中断せずにキャッシュをクリアするための 3 つのオプションがあります。

ページキャッシュのクリア

1. PageCache のみをクリアするには、次のコマンドを使用します。これにより、PageCache が明確にクリアされ、メモリ リソースが解放されます。

sudo sync; echo 1 > /proc/sys/vm/drop_caches

Dentries と inode のクリア

2. dentriesinode のみをクリアするには、次のコマンドを使用します。これにより、ファイル システムが同期され、dentry と i ノードの両方がクリアされます。キャッシュされたディレクトリと i ノードの情報を解放することにより、システムのパフォーマンスが向上します。

sudo sync; echo 2 > /proc/sys/vm/drop_caches

PageCache、Dentries、および Inode のクリア

3. ページキャッシュデントリ、およびinodeをクリアするには、次のコマンドを使用します。ファイルシステムを削除し、ページキャッシュ、デントリ、および i ノードをクリアして、メモリを解放し、システムのパフォーマンスを向上させます。

sudo sync; echo 3 > /proc/sys/vm/drop_caches 

上記のコマンドの各部分の説明は次のとおりです。

  • sudo は、スーパーユーザーとしてコマンドを実行するために使用されます。
  • sync はファイル システム バッファをフラッシュします。
  • ”; ” セミコロンは、1 行で複数のコマンドを区切るために使用されます。
  • echo 3 > /proc/sys/vm/drop_caches コマンドは、最近アクセスしたファイルの一時記憶領域であるページ キャッシュを削除するために使用されます。

: drop_caches ファイルは、どの種類のキャッシュ データをクリアするかを制御します。値は次のとおりです。

  • 1 – ページ キャッシュのみをクリアします。
  • 2 – dentry と i ノードをクリアします。
  • 3 – ページ キャッシュ、dentry、および i ノードをクリアします。

カーネルのドキュメントで説明されているように、drop_caches に書き込むと、アプリケーション/サービスを停止することなくキャッシュが消去され、コマンド echo がファイルへの書き込みの仕事を行います。

ディスク キャッシュをクリアする必要がある場合、エンタープライズおよび運用環境では最初のコマンド “...echo 1 > …” が最も安全です。 ”PageCache のみをクリアします。

“...echo 3 > ” 上の 3 番目のオプションは、何をしようとしているのかがわかるまでは、ページキャッシュをクリアしてしまうため、運用環境で使用することはお勧めできません。 > デントリ と i ノード

Linuxでスワップスペースをクリアする方法?

スワップ スペースをクリアするには、-a オプションを指定して swapoff コマンドを使用します。これにより、すべてのスワップ パーティションが無効になります。

sudo swapoff -a

次に、次のコマンドを実行して元に戻します。これにより、すべてのスワップ パーティションがアクティブになります。

sudo swapon -a

Linux でバッファ、キャッシュ、スワップを解放することは推奨されますか?

一般に、Linux カーネルで使用される可能性のある Linux のバッファ キャッシュ を手動で解放することは得策ではありません。Linux カーネルは、これらのリソースを効率的に管理するように設計されています。これらを手動でクリアすると、システムのパフォーマンスが中断される可能性があります。

ただし、極度のメモリ負荷が発生していて他の方法でメモリを解放できない場合など、バッファキャッシュをクリアする必要がある状況がまれにあります。このような場合は、潜在的なパフォーマンスへの影響を認識し、慎重に作業を進める必要があります。

同様に、Linux でスワップ領域をクリアすることは、通常の状況では日常的ではなく、推奨される方法でもありません。

メモリ最適化の自動化

プロセスを自動化し、メモリを定期的にクリアするには、指定した間隔でコマンドを実行する cron ジョブを設定できます。

crontab 構成を開きます。

crontab -e

次の行を追加して、毎日午前 0 時にキャッシュ、バッファー、およびスワップ領域をクリアします。

0 0 * * * sudo sync; echo 3 > /proc/sys/vm/drop_caches
0 0 * * * sudo echo 1 > /proc/sys/vm/drop_caches
0 0 * * * sudo sync; echo 2 > /proc/sys/vm/drop_caches
0 0 * * * sudo swapoff -a && sudo swapon -a

cron を使用したジョブのスケジュールに関する詳細については、「11 の Cron スケジュール ジョブ」というタイトルの記事を参照してください。

Linux 運用サーバーの RAM キャッシュをクリアすることは推奨されますか?

いいえそうではありません。毎日午前 2 時に RAM キャッシュをクリアするスクリプトをスケジュールしたシナリオを考えてみましょう。毎日午前 2 時にスクリプトが実行され、RAM キャッシュがフラッシュされます。しかし、ある日、予想外に多数のユーザーが Web サイトにオンラインになり、サーバー リソースに大きな負荷がかかります。

同時に、スケジュールされたスクリプトが実行され、キャッシュ内のすべてがクリアされます。現在、すべてのユーザーがディスクからデータを取得しているため、サーバーのクラッシュやデータベースの破損につながる可能性があります。したがって、アクションに注意して、必要な場合にのみ RAM キャッシュをクリアすることが重要です。そうしないと、Cargo Cult システム管理者になる危険があります。

結論

Linux システムをスムーズに実行するには、効率的なメモリ管理が不可欠です。 RAM メモリ キャッシュ、バッファ、およびスワップ スペースを定期的にクリアすると、システムのパフォーマンスが大幅に向上します。これらのメカニズムを理解し、提供されているコマンドを使用することで、Linux システムを最高の状態で実行し続けることができます。

それは今のところすべてです。記事を楽しんでいただけましたら、貴重なフィードバックをコメント欄で忘れずに共有してください。実稼働環境やエンタープライズ環境で RAM キャッシュとバッファをクリアするための良いアプローチについて、ご意見をお聞かせください。