7

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

  • オペレーティング システム = Redhat Linux
  • プログラミング言語 = POSIX を使用した C++
  • 要件 = 時間内の 1 つのスナップショットだけでなく、無期限に数秒ごとにサンプルを取得する必要があります。
  • 制約 = スレッドに追加のコードを書き込むことは許可されていません

    「top」コマンドを使用できることは知っていますが、他にどのような方法がありますか? 「ps」のフラグはありますか?

よろしくお願いいたします。

4

4 に答える 4

7

の内容を読んで/proc/[your PID]/statプロセス全体の情報を取得できます。2.6 カーネルを使用している場合は/proc/[your PID]/task/[thread ID]/stat、個々のスレッドの情報も含まれています。(こちらをご覧ください

具体的には、次の 2 つのフィールドがあります。

このプロセスがユーザー モードでスケジュールされた jiffy の数。

時間 %lu

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

キュータイム %ld

ここで問題になるのは、数値の単位です。jiffy は 1/HZ 秒です。ここで、HZ はカーネル クロックのティック レートであり、このクロック レートを決定するのは難しい部分です。

これが 1 つの特定のシステムにのみ必要な場合は、いくつかのテストを行うか、カーネル ヘッダーを調べて、この値をプログラムにハードコードすることができます。より一般的な方法でそれを決定する方法を知りたい場合は、ソース コードを見て、top のようなツールがどのようにそれを行っているかを調べることができます(old_Hertz_hack()関数と関連するコメントを参照してください) 。

于 2009-04-19T19:13:02.310 に答える
1

おそらくこれを行うより簡単な方法は、getrusageを Linux 固有の拡張子RUSAGE_THREAD. これらの時間を取得したら、最後にサンプリングした時間を差し引き、最後のサンプルから経過した実際の時間で割ります。つまり、CPU 使用率をパーセンテージで取得できます。

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

于 2011-10-17T17:03:02.290 に答える
0

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

その後、次のコマンドを使用して、プロセスの CPU/メモリ使用量のみを表示できます

top -p {pid}

その後、「Shift」+「h」を押してスレッドを表示できます

于 2016-08-18T14:37:27.457 に答える
0

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

これがあなたの状況のハウツーです。

于 2009-04-19T17:47:29.193 に答える