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


30

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

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

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

このマシンの負荷は日中変化します。真夜中から午前6時から7時の間は非常に低く、午後6時から8時まではずっと高くなりますが(安定しています)、徐々に低下します。

次の質問があります。

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

回答:


25

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

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

RAMには、プロセスメモリ(スワップアウト可能)とディスクキャッシュ(ファイルから再読み込み可能)の2つの主要な競合他社があります。ディスクキャッシュよりもプロセスメモリを常に優先する理由はありません。ファイルを何度もメモリに読み込み続けるよりも、プロセスメモリの使用頻度の低い部分をスワップアウトする方が適切です。ディスクキャッシュに割り当てられるメモリの約半分(たとえば30%〜70%)を使用して得られる数値は、実行するはずのタスクに適度な量のRAMを搭載したシステムで一般的です。


6
NSWAP列が見つかりません(Ubuntu 16.04:/)。
jjmontes

1
@jjmontes 削除れました。理由はわかりません。
ジル 'SO-悪であるのをやめる'

ホテルトップよくある質問著者は正確にスワップの使用量を報告することができます信じていませんし、そのトップのメトリック不正確であると述べています。
オリバーエヴァンス

0

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

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

一言で言えば、ツールが好きtopか、htopスワップの使用量に関するすべてで正確な情報を提供していません。より正確な情報を取得するには、/procフォルダー(疑似ファイル内/proc/$PID/smaps)に飛び込む必要があります。

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


0

htop v1.01、私は追加するには、「S」を押すNSWAP(ジルが示唆したように)、その後、代わりに「F2」の欄をColumns> Available Columns>とF5、それを追加します。

ここに画像の説明を入力してください


私はhtop 2.0.1を持っていますが、NSWAPオプションが表示されません:(
アダム

1
@Adamこの情報を取得する信頼できる方法がないため、メンテナンス担当者はこの列を表示したくありません。参照htopのトップのように、SWAP列を備えていないのはなぜ?
Genjo

0

vmstatfreeなどのツールの出力をポーリングおよび解析せずtopに見るのに最適な場所は、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呼び出しをしての出力と一致topし、free

繰り返しますが、これはゲットーのアプローチですが、一回だけ必要なようです

また、ubuntuスワップガイドを読むこともできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.