2009-04-19 12 views
5

プロセス内のすべてのスレッドのCPU使用率メト​​リックを取得する必要があります。Redhat LinuxでスレッドのCPU使用率メト​​リックを取得する方法

  • オペレーティングシステム=のRedhatでlinux
  • プログラミング言語= C++ POSIX
  • 要件=時間内に1つだけでなく、スナップショットのために、indefinetlyサンプルごとに数秒を取る必要を使用。
  • 制約=私はあなたが「トップ」コマンドを使用することができます知っているスレッド

    に追加のコードを記述することができますが、他のどのような方法ではないがありますか? "ps"のフラグはありますか?

ご協力いただきありがとうございます。

答えて

0

Linuxで利用可能なgnu gprofでこれを行うことができます。私は彼らがスレッドをサポートすると主張していると信じていますが、これはプロセスレベルでのプロファイリングよりも複雑なので、探している結果が得られないかもしれません。

状況に応じてhowtoがあります。

5

/proc/[your PID]/statの内容を読んでプロセス全体の情報を得ることができ、2.6カーネルがある場合は、/proc/[your PID]/task/[thread ID]/statに個々のスレッドに関する情報もあります。

このプロセスは、ユーザモードでスケジュールされたjiffy単位の数:

hereを参照)。具体的には、これらの2つのフィールドがあります。

STIMEが%lu

このプロセスがカーネルモードでスケジュールされたjiffy単位の数。

cutime%のLD

ここで問題の一部は、値が与えられた単位です。 jiffyは1/HZ秒です。ここで、HZはカーネルクロックティックレートであり、このクロックレートを決定するのが難しい部分です。

特定のシステムでのみ必要な場合は、テストを行うか、カーネルヘッダーを見て、この値をプログラムにハードコードすることができます。より一般的な方法で決定する方法を知りたい場合は、its source codeold_Hertz_hack()の機能と関連するコメントを参照)を見て、トップのようなツールがどのように機能しているかを見ることができます。

+0

私は特定のマシンでHz値を取得する方法を見つけました:cat/boot/config-'uname -r' | grep HZ –

1

おそらくもっと簡単な方法これを行うには、getrusageRUSAGE_THREADのLinux固有の拡張子を使用します。これらの時間があれば、最後にサンプリングした時刻を減算し、最後のサンプルから経過したリアルタイムで除算することができます。つまり、CPU使用率をパーセントで表示します。

Linux固有のドキュメントについては、rusage liunx man pageを参照してください。

0

"top"コマンドを使用して最初にプロセスIDを見つけることができます。

その後、あなたがプロセスのためにのみ表示CPU /メモリ使用状況にその後

top -p {pid} 

を、次のコマンドを使用することができ、あなたがスレッドを表示するには、「Shiftキー」+「H」を押すことができ

関連する問題