2010-02-13 59 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