1

Solaris 実行キューの内容を教えてくれるコマンドはありますか? vmstat を使用してカウントを取得できますが、そこにあるプロセス/スレッドを知る必要があります。

4

2 に答える 2

4

実行キューは常に変化しているため、現在の実行キューにある一連のプロセスを取得することはほとんど不可能です。

とは言っても、STATからのプロセス リストの (状態) フィールドを見ることで、概算を得ることができますps。以下のコマンドを実行すると:

$ ps aux

...STATフィールドが で始まる場合R、プロセスはカーネルによってマークRUNNABLEされます。これは、ほとんどのオペレーティング システムで、プロセスが実行キューにあることを意味します。私のマシンで実行可能なプロセスは次のようになります。

USER       PID %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
root     78179   0.0  0.0   599828    480 s003  R+    7:51AM   0:00.00 ps aux

solaris では、prstatコマンドを使用してSTATE列を確認することもできます。この値runは、プロセスが実行キューにあることを示します。cpuN(この値は、プロセスが現在プロセッサ N で実行されていることを示していることにも注意してください。

例えば:

$ prstat -s cpu -n 5

PID USERNAME    SIZE    RSS STATE   PRI NICE    TIME    CPU PROCESS/NLWP
13974   kincaid 888K    432K    run 40  0   36:14.51    67% cpuhog/1
27354   kincaid 2216K   1928K   run 31  0   314:48.51   27% server/5
14690   root    136M    46M sleep   59  0   0:00.59 2.3%    Xsun/1
14797   kincaid 9192K   7496K   sleep   59  0   0:00.10 0.9%    dtwm/8
14851   kincaid 24M 14M sleep   48  0   0:00.03 0.3%    netscape/1
Total: 97 processes, 190 lwps, load averages: 2.18, 2.15, 2.11
于 2010-02-13T12:52:24.567 に答える
1

0xfe の回答を修正しようとしていたところ、あなたがすでに修正しているのを見ました。実行キューにはプロセスではなく広告が含まれているため、「実行状態」行の数を実行キューとほぼ一致させたい場合は、prstat コマンドで -L オプションを指定する必要があります。アーティファクトをサンプリングすると、正確な一致が得られなくなる可能性があることに注意してください。

いずれにせよ、どのプロセス/スレッドが実行キューに入っているかを正確に知りたい場合は、Solaris 10 以降を実行していると仮定して、dtrace を使用することをお勧めします。

マシンの /usr/demo/dtrace ディレクトリにすでにある可能性のある whoqueue.d スクリプトは、良い出発点となります。

# dtrace -s /usr/demo/dtrace/whoqueue.d
Run queue of length 1:
  24349/1 (dtrace)
Run queue of length 3:
  0/0 (sched)
  0/0 (sched)
  0/0 (sched)
Run queue of length 4:
  22468/30 (java)
  22468/17 (java)
  22468/23 (java)
  22468/10 (java)

詳しくはこちらのページをご覧ください。

于 2010-02-16T17:02:31.720 に答える