Очередь запуска процессора Solaris - PullRequest
1 голос
/ 13 февраля 2010

Есть ли команда, которая может сказать мне, что находится в очереди запуска Solaris? Я могу получить счет с помощью vmstat, но мне нужно знать, какие процессы / потоки там.

Ответы [ 2 ]

4 голосов
/ 13 февраля 2010

Очередь выполнения всегда меняется, поэтому практически невозможно получить набор процессов в текущей очереди выполнения.

Тем не менее, вы можете получить аппроксимацию, посмотрев на поле 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

В солярисе вы также можете использовать команду 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 голос
/ 16 февраля 2010

Я собирался исправить ответ 0xfe, когда увидел, что ты уже сделал это. Очередь выполнения содержит записи, а не процессы, поэтому параметр -L является обязательным для команды prstat, если вы хотите, чтобы количество строк «запуска состояния» более или менее соответствовало очереди выполнения. Помните, что артефакты выборки, вероятно, не позволят получить точные совпадения.

В любом случае, если вы хотите точно знать, какие процессы / потоки находятся в очереди выполнения, вам лучше пойти по пути dtrace, предполагая, что вы используете Solaris 10 или новее.

Хорошим началом будет сценарий 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)

Подробнее см. на этой странице .

...