2010-02-13 2 views
1

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

ответ

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 

На Солярис, вы можете также использовать команду 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

+0

@Vasu: что такое «точная информация о очереди выполнения» в этом контексте? Я думаю, что для этого будет трудно найти разумный смысл. – miracle173

1

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

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

whoqueue.d сценарий, который, возможно, уже был в/USR/демонстрационном каталоге/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) 

Посмотрите this page для деталей.

+0

Спасибо. Мне не нужна очень высокая точность, prstat с интервалом в 1 секунду для меня достаточно. Я не могу использовать dtrace, поскольку я нахожусь в Solaris 9. – Vasu

Смежные вопросы