web-dev-qa-db-ja.com

私のスワップ(Ubuntu)は何を使用していますか?

データベースを実行しているUbuntu 8.04サーバーと、Javaアプリケーションサーバーの束があります。そのメモリ構成と使用法は次のとおりです。

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

スワップは毎晩上がり、夜に解放されることに気づきました。需要はすべての日で同じではなく、異なる時間に始まります。そのため、あいまいな「午後-夜」の境界を除いて、かなりランダムです。

このマシンの負荷は日によって異なります。午前0時から午前6時から7時の間は非常に低く、午後6時から8時まではずっと高くなります(ただし安定します)。

今、私は次の質問があります:

  1. スワップを使用しているプロセスを確認するにはどうすればよいですか?
  2. キャッシュからメモリを取り出すのではなく、スワップアウトする方がよいのはなぜですか?
32
Konrad Garus

あなたが説明するスワップの使用パターンは意外に聞こえません。それらは、めったに使用されないページを持つ、永続的に実行されているいくつかのプロセスと一致しています。日中はアクティビティが多いため、ほとんど使用されないページがほとんど常にスワップされています。夜になると、RAMに空き容量が増えます。

各プロセスがtopまたはhtopで使用しているさまざまな種類のメモリの量を垣間見ることができます。どちらもデフォルトではスワップの使用法を表示しませんが、どちらも(top:fを押してSWAP列をオンにするように構成できます; htop:を押す F2NSWAP列を追加します)。特定のプロセスに関する詳細情報は、cat /proc/12345/vmstatを使用して取得できます。ここで、12345はプロセスIDです。一部のページは複数のプロセスで共有されているため、「プログラムが使用しているスワップの量」は完全には定義されていないことに注意してください。

RAMの競合相手には、主に2種類あります。プロセスメモリ(スワップアウト可能)とディスクキャッシュ(ファイルから再読み取り可能)です。常にディスクキャッシュよりもプロセスメモリを優先する理由はありません。ファイルを何度もメモリに読み込み続けるよりも、プロセスメモリのほとんど使用されない部分をスワップアウトする方が適切です。メモリの約半分(30%〜70%など)をディスクキャッシュに割り当てた場合の数値は、RAMすることになっています。

vmstatfreetopなどのツールの出力をポーリングおよび解析しない場合、調べるのに最適な場所は、システム上のrootユーザーまたは他のユーザーのcrontabです。システムに対する一般的な負荷が特定の時間に確実に急上昇する場合は、リソースの必要性を生み出すプロセスがcronにある可能性があります。それ以外の場合は、常にscriptユーティリティを使用してゲットースローアウェイロギングユーティリティを作成できます。このユーティリティは、STDOUTに送信されるすべてのものを記録するだけです。

したがって、後で検査するために出力をキャッチするために1回限りの使い捨てスクリプトを実行する必要がある場合は、1つのターミナルで次のように入力します。

script /tmp/free.txt

その後

while (true); do date; free; sleep 30; done

そして別のターミナルで

script /tmp/top.txt

その後

while (true); do date; top -n 1; sleep 30; done

そして翌朝、両方のscript呼び出しを強制終了し、topfreeの出力を一致させます

もう一度、これはゲットーのアプローチですが、1回限りで十分なようです。

あなたも読みたいかもしれません buntu swapガイド

0
Brad Clawsie

htop v1.01、「S」を押して「F2」ではなくNSWAP列を追加しました(Gillesが示唆したように)、次にColumns> Available Columns>およびF5を追加します。

enter image description here

0
Genjo

StackOverflowでは、最初の質問(「実際にどのプロセスが実際にswapを使用していますか?」)に対する優れた回答があります。

https://stackoverflow.com/a/7180078/1442301

簡単に言えば、tophtopなどのツールは、スワップの使用に関する正確な情報をまったく提供しません。より正確な情報を取得するには、/procフォルダー(疑似ファイル/proc/$PID/smaps内)に飛び込む必要があります。

上記の post には、この情報を適切にエコーするための短いシェルスクリプトが含まれています。

0
Xavier