1) キャッシュメカニズムの紹介 Linux システムでは、ファイルシステムのパフォーマンスを向上させるために、カーネルは物理メモリの一部を使用して、システム操作とデータ ファイルをキャッシュするためのバッファーを割り当てます。カーネルは読み取りまたは書き込み要求を受信すると、まずキャッシュにアクセスして、要求されたデータがあるかどうかを確認します。ある場合は、直接戻ります。ない場合は、ドライバーを介してディスクを直接操作します。 CPU コンテキスト スイッチング: CPU は各プロセスに一定のサービス時間を割り当てます。タイム スライスが使い果たされると、カーネルは実行中のプロセスからプロセッサを取り戻し、プロセスの現在の実行状態を保存してから、次のタスクを読み込みます。このプロセスはコンテキスト スイッチングと呼ばれます。本質的には、終了したプロセスと実行するプロセスの間でプロセスを切り替えることです。 2) キャッシュとメモリの使用状況を確認する [root@localhost ~]# free -m キャッシュされた未使用の共有バッファの合計 会員番号: 7866 7725 141 19 74 6897 -/+ バッファ/キャッシュ: 752 7113 スワップ: 16382 32 16350 上記のコマンド結果から、合計メモリが 8G で、7725M が使用されており、141M が残っていることがわかります。多くの人がこのように見ています。 空きメモリ = 空き (141) + バッファ (74) + キャッシュ (6897) 使用メモリ = 合計 (7866) - 空きメモリ これから、空きメモリは 7112M、使用メモリは 754M であると計算できます。これが実際の使用率です。-/+ バッファ/キャッシュ ライン情報も参照できますが、これも正しいメモリ使用率です。 3) バッファとキャッシュの区別 カーネルは、システムが物理メモリを使用し、データを正常に読み書きできることを保証しながら、バッファ サイズを割り当てます。 バッファは、メタデータとページをキャッシュするために使用され、システム キャッシュとして理解できます (例: vi がファイルを開く場合)。 cached は、ファイルをキャッシュするために使用され、データ ブロック キャッシュとして理解できます。たとえば、dd if=/dev/zero of=/tmp/test count=1 bs=1G テストでファイルを書き込むと、そのファイルはバッファーにキャッシュされます。このテスト コマンドが次に実行されると、書き込み速度が大幅に速くなります。 4) スワップの使用 スワップとはスワップ パーティションのことです。通常、ここで言う仮想メモリとは、ハード ディスクから分割されたパーティションのことです。物理メモリが不足すると、カーネルはバッファ(キャッシュ)内の長期間使用されていない一部のプログラムを解放し、これらのプログラムを一時的にスワップに格納します。つまり、スワップは物理メモリとキャッシュメモリが不足している場合にのみ使用されます。 スワップのクリーンアップ: swapoff -a と swapon -a 注意: このクリーンアップには前提条件があります。空きメモリは、すでに使用されているスワップ領域よりも大きくなければなりません。 5) キャッシュメモリを解放する方法 a) ページキャッシュをクリーンアップする # echo 1 > /proc/sys/vm/drop_caches または # sysctl -w vm.drop_caches=1 b) dentry(ディレクトリキャッシュ)とinodeをクリーンアップする # echo 2 > /proc/sys/vm/drop_caches または # sysctl -w vm.drop_caches=2 c) ページキャッシュ、dentry、inodeを消去する # echo 3 > /proc/sys/vm/drop_caches または # sysctl -w vm.drop_caches=3 上記の 3 つの方法はすべて、キャッシュを解放するための一時的な方法です。キャッシュを永続的に解放するには、/etc/sysctl.conf ファイルで vm.drop_caches=1/2/3 を設定する必要があります。その後、sysctl -p が有効になります。 さらに、sync コマンドを使用してファイル システム キャッシュをクリーンアップすることもできます。これにより、ゾンビ オブジェクトとそれらが占有するメモリもクリーンアップされます。 # 同期 上記の操作はほとんどの場合システムに害を及ぼすことはなく、未使用のメモリを解放するのに役立つだけです。 しかし、これらの操作の実行中にデータが書き込まれると、データはディスクに到達する前にファイル キャッシュから実際にクリアされるため、悪影響が生じる可能性があります。では、どうすればこのような事態を回避できるのでしょうか? したがって、ここでは、inoe/dentry キャッシュを消去するときに使用する優先順位をカーネルに指示するファイル /proc/sys/vm/vfs_cache_pressure について言及する必要があります。
メモリを解放する前に、sync コマンドを使用して同期し、ファイル システムの整合性を確保し、変更された i ノード、遅延ブロック I/O、読み取り/書き込みマッピング ファイルなど、書き込まれていないすべてのシステム バッファーをディスクに書き込みます。そうしないと、キャッシュ解放プロセス中に保存されていないファイルが失われる可能性があります。 /proc は、読み取りおよび書き込み操作を通じてカーネル エンティティとの通信手段として使用できる仮想ファイル システムです。つまり、/proc 内のファイルを変更することで、現在のカーネルの動作を調整できます。つまり、/proc/sys/vm/drop_caches を調整することでメモリを解放することができます。 drop_caches の値は 0 から 3 までの数値で、それぞれ異なる意味を表します。 0: 解放しない (システムのデフォルト値) Linux システムでキャッシュをクリアする方法については、以上が参考になりました。123WORDPRESS.COM を学習していただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: MySQL データベースで UTF-8 エンコードを設定する方法
>>: シンプルなビデオ連射機能を実装する JavaScript CSS3
以下のように表示されます。 CSSコードコンテンツをクリップボードにコピー分割{境界線: 2px 固...
FirefoxでBGMを再生するための推奨コードがテストに合格しました空のコントロールパネルを開いて...
コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じの...
この記事では、MySQL 8.0.15 winx64解凍版のインストールと設定方法を紹介します。具体...
質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...
コードをコピーコードは次のとおりです。 <!-- ブラウザがローカル キャッシュからページにア...
idea を使用して JSP ファイルを書き込む前に、jdk 環境 (ここでは説明しません) と対応...
目次序文考えるライブラリディレクトリの解析とダウンロード使い方ファイルの場所実際の通話質問要約する序...
目次1. jsonp クロスドメイン2. document.domain + iframe クロスド...
目次1.スリープ機能2.タイムアウトを設定する3. 約束4. 非同期待機5. 1秒後に出力1、2秒後...
目次背景1. クエリ条件に「or」が含まれているため、インデックスが失敗する可能性があります。 2....
lepus3.7 を使用して MySQL データベースを監視中に、次の問題が発生しました。このブログ...
イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...
目次1. Vue スキャフォールディングをインストールする2. プロジェクトを作成する3.1 プロジ...
CSSフィルターを使用してマウスオーバー効果を記述する <div class="fi...