1

有没有可以告诉我 Solaris 运行队列中有什么的命令?我可以使用 vmstat 进行计数,但我需要知道那里有哪些进程/线程。

4

2 回答 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 回答