是否有一个命令可以告诉我Solaris运行队列中的最新信息? 我可以使用vmstat获取计数,但我需要知道那里有哪些进程/线程。
答案 0 :(得分: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
答案 1 :(得分:1)
当我看到你已经这样做时,我正要纠正0xfe的答案。运行队列包含theads而不是进程,因此如果要使“状态运行”行的数量与运行队列或多或少匹配,则使用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)
详情请查看this page。