有没有可以告诉我 Solaris 运行队列中有什么的命令?我可以使用 vmstat 进行计数,但我需要知道那里有哪些进程/线程。
问问题
23672 次
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 方式。
whoqueue.d 脚本可能已经在您机器上的 /usr/demo/dtrace 目录中,这将是一个好的开始:
# 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 回答