ホームページ  >  記事  >  システムチュートリアル  >  Linux のメモリが食われている

Linux のメモリが食われている

PHPz
PHPz転載
2024-02-20 10:48:10717ブラウズ

これは、メモリ管理における Windows と Linux の違いです。一見すると、Linux システムはメモリを消費します (Linux が RAM を食べました)が、実際には、これがメモリ管理の特徴でもあります。

Linux のメモリが食われている

無料コマンド紹介

以下は、free コマンドを使用して研究室ファイル サーバーのメモリを表示した結果です。-m オプションは、単位として MB を使用することを示します:

Linux のメモリが食われている

出力の 2 行目は、システム メモリの使用量を示します:

Mem: 合計 (合計) = 3920MB、

使用済み (中古) = 1938MB、

無料 (無料) = 1982MB、

shared (共有メモリ) = 0MB、

バッファ = 497MB、

キャッシュ = 1235MB

注: 最初の 4 つの項目は比較的理解しやすいです。バッファとキャッシュを翻訳するのに適切な言葉はありません。これらの違いは次のとおりです:

  • バッファとは、まだディスクに「書き込まれていない」ものです。
  • キャッシュとは、ディスクから「読み取られて」、後で使用するために保存されたものです。

つまり、バッファはディスクに出力されるデータを格納するために使用され、キャッシュはディスクから読み取られ、将来の使用のためにメモリに格納されるデータです。これらは IO パフォーマンスを提供するために導入されました。

出力の 3 行目は、2 行目 -/buffers/cache:

に基づいて何が取得されるかを示します。

– 使用されるバッファ/キャッシュ = 使用されるメモリ – バッファ – キャッシュ = 1938MB – 497MB – 1235MB = 205MB

バッファ/キャッシュの空き数 = キャッシュされたメモリの空きバッファ数 = 1982MB 497MB 1235MB = 3714MB

出力の 3 行目は、スワップ パーティションの使用を示します:

スワップ:合計 = 4095MB

使用済み(中古)= 0MB

無料(無料)= 4095MB

システムには現在十分なメモリがあるため、スワップ パーティションは使用されません。

上記の出力結果の 3 行目は、理解するのがさらに難しいかもしれません。なぜこのデータ行をユーザーに表示する必要があるのですか? メモリ使用量からシステム バッファ/キャッシュ メモリを引いたものは何を意味しますか? システムの空きメモリとバッファ/ キャッシュされたメモリとは何を意味しますか?

記憶の分類

私たちはメモリを 3 つのカテゴリに分類し、ユーザーとオペレーティング システムの観点からその用途に異なる名前を付けています。

上の表の内容は、free コマンドの「バッファ/キャッシュ」のメモリを表しています。このメモリはオペレーティング システムの観点からは実際に使用されていますが、ユーザーが使用したい場合は、このメモリをすぐに再利用できます。ユーザー プログラムによって使用されるため、このメモリはユーザーの観点からはアイドルとして分類される必要があります。

free コマンドで出力された結果にもう一度戻ります。3 行目の結果出力は理解できるはずです。この行の数値は、ユーザーの観点から見たシステム メモリの使用量を表しています。したがって、top または free コマンドを使用してシステムにどれだけのメモリが残っているかを確認する場合は、実際に空きメモリをバッファ/キャッシュ メモリに追加する必要があります。これが、システムの実際の空きメモリです。

バッファ/キャッシュされた特典
Linux のメモリ管理は、多くの慎重な設計を行っており、dentry のキャッシュ (ファイル パス名から i ノードへの変換を高速化するために VFS で使用) に加えて、バッファ キャッシュとページ キャッシュという 2 つの主要なキャッシュ メソッドも採用しています。目的は、ディスク IO パフォーマンスを向上させるためです。低速なブロックデバイスから読み取られたデータは一時的にメモリに保持されるため、その時点でデータが不要になった場合でも、次回アプリケーションがデータにアクセスするときにメモリから直接読み込むことができるため、低速を回避できます。したがって、システム全体のパフォーマンスが向上します。

Linux は、これらの空きメモリを最大限に活用します。設計上の考え方は、メモリに空きがある場合は、より多くのデータをキャッシュするためにメモリを使用する方が良いということです。次回プログラムがデータに再びアクセスするとき、速度は速くなります。プログラムがメモリを使用する必要があり、システム内のメモリが不足している場合、スワップ パーティションを使用する代わりに、キャッシュの一部がすぐにリサイクルされ、ユーザー プログラムが使用できるように残されます。

したがって、バッファ/キャッシュは実際には有益であり、無害であることがわかります。実際の欠点は、Linux がメモリを消費するという錯覚をユーザーに与える可能性があります!

実際には、そうではありません。Linux がメモリを使い果たしているわけではありません。スワップ パーティションが使用されておらず、メモリが不足している限り、Linux は大量のデータをキャッシュするため、幸運だと感じるはずです。次回も利用できるかもしれません。

実験による証明

次の実験は、上記の結論を検証するために使用されます:

大きなファイルを次々に読み取り、2 回読み取る方法を比較します。

1. まず 1G の大きなファイルを生成します

Linux のメモリが食われている

2. キャッシュをクリアする

Linux のメモリが食われている

3. このファイルを読み取って、所要時間をテストします

Linux のメモリが食われている

4. ファイルを再度読み取り、所要時間をテストします。

Linux のメモリが食われている

上記からわかるように、この 1G ファイルの最初の読み取りには約 18 秒かかりましたが、2 回目の読み取りにはわずか 0.3 秒しかかかりませんでした。これは完全に 60 倍の改善です!

以上がLinux のメモリが食われているの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。