web-dev-qa-db-ja.com

プロセスのメモリ/ CPU使用率を経時的に監視および記録する方法

バルーニングメモリプロセスがスワップを満たし、マシン全体(Apacheなど)を強制終了する、スワップの死などの問題を診断する方法を探しています。

私はすでにサボテンを使用しており、nagios(できればそうではないかもしれません)またはmuninを設定できますが、個々のプログラムの使用状況を記録することはできません-全体的なステータスのみ。

30秒ごとに一部のファイルに>>するスクリプトをロールバックできることはわかっていますが、既存の成熟したソリューションが既に存在するかどうかを確認したいと思います。

繰り返しますが、理想的には:

  • n秒ごとにプロセスのメモリ使用量を記録する
  • プロセスのCPU使用率をN秒ごとに記録する
  • チャートと履歴をサポート
  • 平均をサポート-mysqldが最終日に43%のCPUを使用し、平均で400MBのメモリをサポート
  • フリーでオープンソースであること

プロセス名は事前に知られていないので、知っておくべきではありません。アイデアは、プロセス名を監視させ、上位の違反者を確認することです。

私のシステムはLinux(OpenSUSE)です。

32

上位の攻撃者だけが必要な場合は、topを比較的長い間隔(60秒以上)でバッチモードで実行することを検討してください。複数のリソースで上位の攻撃者をキャプチャするには、複数のtopを実行する必要がある場合があります。リソースが使い果たされているときにtopを数サイクル実行するようにシステムを構成しました。

sarをバッチモードで実行して、リソース使用率をキャプチャすることを検討してください。これはサーバーベースですが、問題が発生している時間を特定するのに役立ちます。

muninを実行して通知を有効にします。これにより、サーバーにアクセスしてサーバーが停止するのを監視できる可能性があります。ダウンする前に問題を修正できる場合があります。

メモリリークの場合、スワップ使用量が着実に増加することは問題を示しています。私はかつてサーバーが数日かけてゆっくりと死ぬのを見ました。問題のサービスは、メモリリークがないか他のプロセスを監視するプログラムでした。システム管理者は、サーバーの応答が停止するまで、スワップの使用量の増加は問題ではないと主張し続けました。

cfengineの異常検出を使用して、スクリプトがトリガーされ、問題が発生したときにシステムの状態をキャプチャできる場合があります。ほとんどのリソースを使用しているプロセスだけでなく、多くの情報が必要になる場合があります。突然の使用の流入では、ネットワーク接続のリスト(名前ではなくアドレス)が必要になる場合があります。メモリ使用量も役立ちます。

16
BillThor

sysstat は、まさにあなたの目的のために作成されています。

12

私は前に使用したことがあります:

http://freshmeat.net/projects/atop/

「上部は、ASCII全画面のパフォーマンスモニターであり、すべてのプロセスのアクティビティ(間隔中にプロセスが終了した場合でも)、システムの毎日のログ、およびプロセスアクティビティを長期間にわたって報告できます。用語分析、色などを使用して過負荷のシステムリソースを強調表示します。定期的に、CPU、メモリ、スワップ、ディスク、ネットワークレイヤーに関連するシステムレベルのアクティビティを示し、アクティブなプロセスごとにCPU使用率を示します。メモリの増加、優先度、ユーザー名、状態、終了コード。」

9
NinjaCat

あなたはcollectdを試しましたか?
非常に強力でカスタマイズ可能です。
多数のプラグインがあり、nagiosと統合できます。

http://collectd.org/features.shtml

6
PiL

http://studyhat.blogspot.com/2010/08/user-activity-view-processes-display.html

上記のリンクの小さなコードを見て、メモリCPUなどを出力してください。

2
Rajat

nmon は、探していることを実行できる優れたツールです。 AIXおよびLinux用に開発されました。大量の詳細な出力を生成し、レポートに簡単に入力できます。あなたがそれをググれば、たくさんのドキュメンテーションとデータを解析するための追加のユーティリティを持っているIBM wikiがあります。

2
mattcaffeine

同様の質問をしたときに提案された回答 質問

イカパン言った

Munin は、インストールと構成の労力を最小限に抑えて稼働時間グラフを取得する最も簡単な方法です。また、一部のプロセスによるCPU使用量の合計にも使用していますが、それはあなたが要求したものではありません。

David Spilletsaid

私は collectd を使用して、他の多くのパラメーターの中でシステムの負荷を記録します。データを [〜#〜] rrd [〜#〜] ストアに格納します。これらのストアは、グラフ化したり、他の多くの利用可能なツールやスクリプトを使用して分析したりできます。グラフに このスクリプト の修正バージョンを使用しています( サンプル出力 )。

Collectdには、さまざまなもの(一般的に求められるすべてのものといくつかの上にあるもの)を監視するためのプラグインがあり、特別なものが必要な場合でも独自のプラグインを作成することは難しくないので、非常に柔軟なツールになります。 rrd.cgiでのグラフの設定は非常に手動のプロセスですが、難しくはありませんが、collectdによって維持されるRRDファイルを操作するためのより便利なツールが見つかるかもしれません。

Nagios または OpenNMS も確認できます。

2
warren

Server Density は、ユーザーが記述したとおりに機能します。

私は私たちの生産サーバーの1つでそれを使用し、それについて非常に満足しています。その最大の特徴は、グラフを表示し、ピークをクリックして、実行中のすべてのプロセスを含む、その時点でのサーバーのCPU /メモリ消費量を確認する機能です。彼らはそれを snapshots と呼んでいます。

それは常に改善されています。最新の機能の1つは anomaly detection です。これにより、異常を簡単に検出できます。さまざまなしきい値を設定することもできます

2
Aron Rotteveel

Nagiosの上にあるCentreon、NagiosとNRPEの組み合わせ。次に、カスタムスクリプトを記述して、データをNRPEにしたい任意の形式でレポートできます。 NagiosはNRPEを使用してリモートサーバーからデータをポーリングし、Centreonはきれいなグラフを作成し、ユーザーの柔軟性を大幅に高めます。 http://beyondhosting.net で使用しています。必要に応じて、centreon + nagiosが設定されたVZコンテナテンプレートをすでに持っています。

グラフcenteronはhostthenpost.org/tyler/2010-07-23_1719.pngをビルドします

2
VisBits

たぶん古き良き OProfile 何が必要ですか?これはカーネルベースのシステムレベルのプロファイラーで、オーバーヘッドはわずか(数パーセント)です。

次に、優れたPerlスクリプト PSMon があります。これにより、あらゆる種類のCPU /メモリ制限を設定できます。これらを超えると、psmonはエラーをログに記録するか、問題のプロセスを強制終了します。

後者の場合、プロファイリングレポートは生成されませんが、同じプロセスを何度も強制終了する場合は、探している厄介な野郎を見つけた可能性があります。 :-)

1

Munin は、Nagiosやその他のツールを必要とせずに、箱から出して必要なすべてを実行します。 OpenSUSEで利用できるRPMがあります。

1
gareth_bowles