Linuxで仮想メモリを監視する正しい方法

以前のブログ投稿で、私は何について話しました 仮想メモリ つまり、スワッピングとページングの違いと、それが重要な理由です。 (TL; DR:スワッピングはプロセス全体をディスクに移動します。ページングは​​プロセス全体ではなく特定のページのみをディスクに移動します。システムよりも多くのメモリを必要とするプログラムを実行すると、ページ(またはプロセス)がに移動されます/実行するのに十分な物理メモリを取得するためにディスクとメモリから–そしてシステムパフォーマンスは低下します。)

次に、Linux(簡単な場所)とSolaris(ほとんどの人やシステムが間違って監視している)で仮想メモリを監視する方法について説明します。

Linuxのメモリ使用量の評価

メモリシステムの測定を考えるときに頭に浮かぶかもしれないXNUMXつのことがあります:

  • 使用中の物理メモリの量
  • 使用中の仮想メモリの量
  • 一方から他方へのページング率

物理メモリー

物理メモリ使用量については、実行できます top or 無料です。 シェルから:

[demo1.dc7:〜] $ free -gキャッシュされた使用済みの空き共有バッファーの合計Mem:47 45 1 0 0 21

または、便利な監視システムを使用して、これを経時的に表示できます。

LogicMonitor _-_ demo _-_ Dashboard

一部の人々は、無料の出力、または上のグラフを見て、「私の1Gシステムの48Gは無料ですか? 記憶が足りません!」 これは自然な反応ですが、間違っています。 Linuxの「空きメモリ」は「無駄なメモリ」(またはオペレーティングシステムがまだ利用できていない「より良いメモリ」)と考えてください。 このシステムのメモリのほぼ半分が使用されていますが、ファイルキャッシュによって使用されています。 ファイルキャッシュは、最近アクセスされたファイルをメモリにキャッシュするという、そのように聞こえます。つまり、プログラムがファイルキャッシュにあるファイルへのアクセスを要求した場合、ディスクアクセスは必要ありません。 Linuxは、効率を上げるために、プログラムの実行に必要のないすべての物理メモリをファイルキャッシュとして使用します。 ただし、プログラムがその物理メモリを必要とする場合、カーネルはファイルキャッシュメモリをプログラムに再割り当てします。 したがって、ファイルキャッシュによって使用されるメモリは(プログラムへの割り当てに使用できるという観点からは)空きですが、プログラムで必要になるまでは便利な目的を果たします。

すべてのLinuxメモリが使用されていて、空きまたはファイルキャッシュとして使用されているものはほとんどない場合でも、問題はありません。 ほとんどの場合、ファイルキャッシュを用意することをお勧めします。ただし、大規模なJavaプログラムを実行していて、ヒープを最大化したい場合はそうではありません。 またはデータベースであり、OSではなくディスクキャッシングをデータベースで管理する必要があります(データベースにはデータの使用率に関する知識が豊富にあるため)。

とにかく、無料がある限り バーチャル メモリであり、アクティブなスワッピングではない場合は、使用率の高い物理メモリで問題ありません。

使用中の仮想メモリ 

使用中のスワップメモリ​​の量を確認するには、次を使用することもできます。 top または 無料です。 command

[demo1.dc7:〜] $ free -tキャッシュされた使用済み空き共有バッファーの合計Mem:49376156 48027256 1348900 0 279292 22996652- / + buffers / cache:24751312 24624844スワップ:4194296 0 4194296合計:53570452 48027256 5543196

またはあなたの監視:

スワップの使用

したがって、上記の出力を見ると、システムがゼロスワップスペースを使用していることがわかります。 したがって、仮想メモリスペース全体の90%が使用されていても(スワップと物理の両方をカウント)、システムの物理メモリが十分に少なくなり、ファイルキャッシュから一部を解放できず、スワップにいくらか置くために。

スワップの使用率が高い場合(システムがすべてのメモリを使い果たす危険があるため、危険な場合があります)、プログラムがさらに必要とし、それを取得できない場合、悪いことが起こります。 (とりわけ、OOM(メモリ不足)キラーは、他の基準の中でも、最初に要求したメモリの量に基づいてプロセスを強制終了し始めます。つまり、サーバーの要点であるサーバープロセスは最初に死んだ人のXNUMX人。)

ただし、アクティブに使用されていないスワップメモリ​​の使用量が低から中程度であっても、心配する必要はありません。 これは、システムがアクティブに使用されていないページを物理メモリからディスクにシフトし、よりアクティブなページのためにメモリを解放したことを意味します。 これは良いことです。 重要なのは、スワップがアクティブに使用されているかどうかを知ることです。これにより、次のセクションに進みます。

仮想メモリのページング率

物理メモリからディスクに移動されるメモリページの速度を確認するには– vmstatを使用して、列を調べます siso (これは、スワップインおよびスワップアウトされたページを表します)。

たとえば、メモリが不足しているシステムの場合:

dev1.lax6:〜] $ vmstat 1 procs ----------- memory ---------- --- swap-- ----- io ----- system-- ----- cpu ----- rb swpd free buff cache si so bi bo in cs us sy id wa st 8 17 2422376 122428 2520 24436 952 676 1796 904 10360 4421 41 0 33 26 0 9 17 2423820 123372 2524 24316 732 1716 752 1792 12259 4592 43 0 25 32 0 8 17 2425844 120408 2524 25044 416 2204 1616 2264 14675 4514 43 0 36 21 0 7 19 2427004 120532 2568 25640 608 1280 764 1308 12592 4383 44 0 36 20 0 8 24 2428816 121712 2572 25688 328 1880 500 1888 13289 4339 43 0 32 25 0

または、SaaSベースで同じことを視覚的に確認します サーバー監視:
LogicMonitor _-_ demo _-_ Dashboard

これは実際には、メモリの問題を示す主な指標です。システムのメモリが不足すると、多くのブロックがスワップアウトされます。 これが高率で発生する場合は、パフォーマンスのボトルネックになる可能性があります。 さらに悪いことに、システムが物理メモリではなくディスク上にあるコードを実行する必要がある場合、それを元に戻す必要があります。つまり、コードはメモリと比較してディスクのアクセス時間(遅い)の影響を受けて実行されます。 (速いです)

まとめ

注意する必要のある75つのメトリックは、スワッピングの速度(XNUMX秒あたり数百ブロックの場合、数分以上–メモリが不足しているため、システムパフォーマンスが低下する)と高レベルのスワップの使用量(仮想メモリ全体ではなく、スワップスペースのXNUMX%以上)これらのXNUMXつの属性を警告する監視システムがある限り、問題はありません。 そうでなければ–あなたは火遊びをしているのです。

もっと見たいです? ここで私たちに従ってください:

Facebookで
Twitterで
LinkedInで