11

topアプリケーションはLinux上のデータをどこで取得しますか?リアルタイムのCPUロード/pidデータに興味があります(/ proc / pidのマニュアルページにあるほとんどすべてのドキュメントを読みましたが、情報はありません)。

pidはjbossです。データを軽量にする必要があります(簡単にエクスポートできるようにするため)。

4

2 に答える 2

12

疑わしい場合は、strace(1)を使用してください。

open("/proc/2/stat", O_RDONLY)    = 4
open("/proc/2/statm", O_RDONLY)   = 4
open("/proc/3/stat", O_RDONLY)    = 4
open("/proc/3/statm", O_RDONLY)   = 4
于 2011-01-28T15:39:40.480 に答える
7

proc(5)に記載されているように、ファイル/proc/(pid)/statには次のフィールドがあります。

utime %lu

このプロセスがユーザーモードでスケジュールされた時間。クロックティックで測定されます(sysconf(_SC_CLK_TCKで除算)。これには、ゲスト時間、guest_time(仮想CPUの実行に費やされた時間、以下を参照)が含まれるため、アプリケーションは認識しません。ゲスト時間フィールドのは、計算からその時間を失うことはありません。

stime %lu

このプロセスがカーネルモードでスケジュールされている時間。クロックティックで測定されます(sysconf(_SC_CLK_TCKで除算)。

特定のプロセスのCPU使用率を取得するには、これらのフィールドを使用します。トップレベルのプロセスは、すべてのスレッドのCPU使用率を集計します。スレッドごとの内訳については、で他のスレッドを見つけることができます/proc/(pid)/task

CPU時間が何らかのしきい値を超えたときに通知を受け取りたい場合は、clock_getcpuclockidを使用してcpuタイムクロックのハンドルを取得し、timer_createまたはtimerfdを使用して指定されたレベルに達したときに通知を受け取ることができます。ただし、クロスプロセスcputimeタイマーはPOSIX仕様のオプション機能であり、サポートされていない可能性があることに注意してください(私はテストしていません)。

于 2011-01-28T17:22:56.047 に答える