2010-02-13 75 views
1

是否有可以告訴我Solaris運行隊列中有什麼的命令? 我可以使用vmstat獲得計數,但我需要知道哪些進程/線程在那裏。Solaris CPU運行隊列

回答

4

運行隊列總是在變化,所以幾乎不可能在當前運行隊列中獲取進程集。

也就是說,您可以通過查看ps的進程列表的STAT(狀態)字段來獲得近似值。當運行以下命令:

$ ps aux 

...的,如果STATR開頭,這個過程被標記爲內核,這在大多數操作系統意味着它在運行隊列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 
+0

謝謝。我會嘗試使用prstat -n 1000 -acL 1,並檢查它是否給出了運行隊列的準確信息。 – Vasu 2010-02-14 09:07:50

+0

@Vasu:在這種情況下什麼是「準確的運行隊列信息」?我認爲這很難找到合理的含義。 – miracle173 2017-12-05 09:32:59

1

我正要糾正0xFE的答案,當我看到你已經做到了運行隊列包含的不是進程,所以如果你想讓「狀態運行」行的數量與運行隊列的匹配程度更多或更少,那麼-L選項對於prstat命令是強制性的。注意採樣工件可能會阻止獲得準確的匹配。

在任何情況下,如果您想要精確知道哪些進程/線程是sitti在運行隊列中,假設您運行的是Solaris 10或更新的版本,則寧願採用dtrace方式。

可能已經在/ usr /演示/ 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) 

看一看this page瞭解詳情。

+0

謝謝。我不需要非常高的準確度,1秒內的prstat對我來說已經足夠了。我無法在Solaris 9上使用dtrace。 – Vasu 2010-02-17 13:15:08