メモリ使用量をグラフ化するシンプルなツール?


14

メモリ使用量をグラフとして、たとえば円グラフとして表示し、各プロセスが個別のスライスであるスクリプトはありますか?

私は、時間の経過に伴うメモリ使用量をグラフ化するMuninのようなものを探しているのではなく、特定の時点におけるプロセスごとのメモリ使用量を示しています。

私の要求をさらに曖昧にするために、それはヘッドレスサーバー用です(Xアプリケーションはありません)。最も簡単な方法は、PNGファイル、または場合によってはHTMLファイル(Javascriptを使用してプロセスのフィルタリング、グラフタイプ間の変更などを可能にする)を記述することです。

回答:


13

プロセスごとのメモリアカウンティングは、後ほど説明するいくつかの理由で注意が必要です。単純な監視には、gkrellmd、またはnagiosスクリプトでおそらく十分です。より高い精度が必要な場合は、一見難しくする必要があります。

smemは、比例セットサイズの概念を導入します。

通常、物理メモリの大部分は複数のアプリケーション間で共有されるため、常駐セットサイズ(RSS)と呼ばれるメモリ使用量の標準的な測定値では、メモリ使用量が大幅に過大評価されます。代わりに、PSSは各共有エリアの各アプリケーションの「公平なシェア」を測定して、現実的な測定を行います。

例:GNOMEを起動すると、アプレットとプログラムごとに1つのプロセスが開始されます。それらはすべてlibglibにリンクしています。Linuxはlibglibをメモリの1つのブロックにロードし、libglibを必要とするすべてのプロセスにマップします。ナイーブメモリアカウンティングは、リンクしているすべてのプロセスに対してlibglibの完全なサイズをカウントします。

smemはlibglibのコストをそれを使用するプロセスに分割し、現実をより詳細に把握します。また、メモリ使用量を表示するための多くのオプションがあります(Webサイトから)。

  1. 基本的なプロセス情報を表示する
  2. システムビューを表示smem -R 4G -K / path / to / vmlinux -w
  3. 合計とパーセンテージを表示smem -t -p
  4. 異なる列を表示smem -c "name user pss"
  5. smem -M libxmlのマッピングによってフィルタリングされたプロセスを表示する
  6. プロセスsmem -m -P [e] volutionでフィルタリングされたマッピングを表示します
  7. キャプチャtarball smemからデータを読み取ります--source capture.tar.gz
  8. pid smem --bar pid -c "p​​ss uss"というラベルの付いた棒グラフを表示します
  9. 名前smem --pie name -s rssでラベル付けされたRSSの円グラフを表示します

ただし、ごく最近のカーネル(> 2.6.27)が必要です。


1
はい、2.6.27であることを彼らの提案合理的に最近はかなりばかばかしいです。新しいカーネルに同梱されていることを知っている唯一のディストリビューションは、Fedora 10とUbuntu 9.01です。
デイブチェイニー

9.04; Ubuntu 8.10は2.6.27に同梱されていましたが、2.6.30はrc3に含まれています。
jldugger 09

申し訳ありませんが、私は長い間RHELの土地で過ごしてきました。ここでは2.6.18が最近のものと見なされています。
デイブチェイニー

5

既製のものは考えられない

ただし、ps -AH vを実行するPHPスクリプトのコンボ| awk '{print $ 8、$ 9、$ 10}'pChartでそれを使用すると、探していることを行うWebページが得られるでしょうか?(Kbでの使用、合計の割合およびプロセス名)


1
+ 1、Google Chart APIでそれについて考えました。:)
ノード

いい視点ね。GoogleのチャートAPIは...と、おそらく速く仕事にある
マークRegensberg

2

見ていsarfaceを -それは、SARデータに依存し、あなたのメモリ使用量(および他のすべてのSAR / sysstatのデータ)を監視することができますライブ。



1

自分でやれ。RRDデータベースを更新する単純なシェルスクリプトを作成します。次に、rrdtoolを使用してグラフを描画します。


1

あなたが本当により低いレベルの詳細に興味があるなら、collectlを忘れないでください。報告できるプロセスごとのメモリ使用率のタイプの例を次に示します。

RECORD 1 cag-dl585-02(1244758290.002)(木6月11日18:11:30 2009)

プロセスの要約(カウンターは/ sec)
#PIDユーザーS VmSize VmLck VmRSS VmData VmStk VmExe VmLib MajF MinFコマンド
 9089ルートS 66856K 0 2328K 1440K 212K 736K 6812K 0 0 sendmail:
 9097 smmsp S 57600K 0 1772K 1304K 204K 736K 5904K 0 0 sendmail:
 9108ルートS 6428K 0 360K 180K 84K 88K 1944K 0 0 gpm
 9120ルートS 74808K 0 1136K 476K 520K 48K 1920K 0 0 crond
 9173 xfs S 20904K 0 1828K 1124K 88K 104K 3084K 0 0 xfs

特定のプロセスに関心がある場合は、適切なフィルター(スレッドを表示するスイッチを含む)を指定できます。

また、メモリ全般に興味がある場合は、スラブの詳細を表示したり、vmstat形式の出力を表示することもできます。既存のツールで既に表示されているのに、なぜvmstat形式でデータを表示したいのですか?それは簡単です-まとめてファイルに統計を記録し、後で複数の形式で再生できます。

それを試して、あなたはそれを好きになるでしょう


1
  1. プロセスをgrepします。
  2. 出力を解析し、テキストファイルにコンマ区切り形式で保存します。
  3. Excelでコンマ区切りファイルを開きます。
  4. Excelのチャートユーティリティを使用して、そのデータのグラフを描画します。

異なる時間間隔でメモリスナップショットが必要な場合...希望する間隔でcronジョブを設定し、スクリプトを実行します。

それが役立つことを願って...


0

これはまさにあなたが探しているものではありませんが、おそらくこのリファレンスを使用してニーズに合わせて調整することができます(「プロセスごとのメモリ使用量」を探してください)。




0

詳細は説明しませんでしたが、collectlには区切り文字で区切られた出力を生成するオプションがあります。そのため、gnuplotの場合は、スペースを含むデータを生成するだけで設定は完了です。Excelにうまくロードされます。コンマが必要な場合は、区切り文字を変更でき、本当にrrdルートを実行したい場合(プロットがデータと一致する必要はないので注意してください!)、区切り文字をコロンに変更し、タイムスタンプをUTCに変更することもできます。-マーク



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