Solaris 実行キューの内容を教えてくれるコマンドはありますか? vmstat を使用してカウントを取得できますが、そこにあるプロセス/スレッドを知る必要があります。
2 に答える
実行キューは常に変化しているため、現在の実行キューにある一連のプロセスを取得することはほとんど不可能です。
とは言っても、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
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)
詳しくはこちらのページをご覧ください。