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


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

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

1.PageCacheのみをクリアします。

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

2.デントとiノードをクリアします。

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

3. PageCache、dentries、およびiノードをクリアします。

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

上記のコマンドの説明。

syncはファイルシステムバッファをフラッシュします。 “;” で区切られたコマンドは順番に実行されます。シェルは、各コマンドが終了するのを待ってから、シーケンス内の次のコマンドを実行します。カーネルのドキュメントに記載されているように、drop_cacheに書き込むと、アプリケーション/サービスを強制終了せずにキャッシュがクリーンアップされます。コマンドechoはファイルへの書き込みを実行します。

ディスクキャッシュをクリアする必要がある場合、“ ... echo1>…。” はPageCacheのみをクリアするため、最初のコマンドはエンタープライズおよび本番環境で最も安全です。何をしているのかがわかるまで、本番環境で“ ... echo 3>” の上にある3番目のオプションを使用することはお勧めしません。

さまざまな設定を適用していて、それが実際にI/Oの広範なベンチマークで特別に実装されているかどうかを確認したい場合は、バッファキャッシュをクリアする必要があります。システムを再起動せずに、上記で説明したようにキャッシュを削除できます。つまり、ダウンタイムは必要ありません。

Linuxは、ディスクを調べる前にディスクキャッシュを調べるように設計されています。キャッシュ内でリソースが見つかった場合、リクエストはディスクに到達しません。キャッシュをクリーンアップすると、OSがディスク上のリソースを探すため、ディスクキャッシュの有用性が低下します。

さらに、キャッシュがクリーンアップされ、OSに必要なすべてのリソースがディスクキャッシュに再度ロードされる間、システムの速度が数秒間低下します。

次に、cronスケジューラタスクを介して毎日午前2時にRAMキャッシュを自動クリアするシェルスクリプトを作成します。シェルスクリプトclearcache.shを作成し、次の行を追加します。

#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"

clearcache.shファイルに実行権限を設定します。

# chmod 755 clearcache.sh

これで、RAMキャッシュをクリアする必要があるときはいつでも、スクリプトを呼び出すことができます。

次に、毎日午前2時にRAMキャッシュをクリアするようにcronを設定します。編集のためにcrontabを開きます。

# crontab -e

以下の行を追加し、保存して終了し、毎日午前2時に実行します。

0  2  *  *  *  /path/to/clearcache.sh

ジョブをcronする方法の詳細については、11 Cron SchedulingJobsに関する記事を確認してください。

番号!そうではない。毎日午前2時にRAMキャッシュをクリアするようにスクリプトをスケジュールした場合の状況を考えてみてください。毎日午前2時にスクリプトが実行され、RAMキャッシュがフラッシュされます。なんらかの理由で、ある日、予想以上のユーザーがWebサイトでオンラインになり、サーバーからリソースを探している可能性があります。

同時に、スケジュールされたスクリプトが実行され、キャッシュ内のすべてがクリアされます。これで、すべてのユーザーがディスクからデータをフェッチしています。サーバーがクラッシュし、データベースが破損します。したがって、必要な場合にのみram-cacheをクリアし、足跡を知ってください。そうでない場合は、CargoCultシステム管理者になります。

スワップスペースをクリアしたい場合は、以下のコマンドを実行することをお勧めします。

# swapoff -a && swapon -a

また、関連するすべてのリスクを理解した後、上記のコマンドを上記のcronスクリプトに追加することもできます。

次に、上記の両方のコマンドを1つのコマンドに組み合わせて、RAMキャッシュとスワップスペースをクリアする適切なスクリプトを作成します。

# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

OR

$ su -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'" root

上記の両方のコマンドをテストした後、スクリプトの実行の前後にコマンド「free -h」を実行し、キャッシュをチェックします。

今のところこれですべてです。この記事が気に入った場合は、コメントで貴重なフィードバックを提供して、本番環境とエンタープライズのRAMキャッシュとバッファをクリアすることをお勧めします。