Я пытаюсь получить процент ЦП для процессов на загруженном сервере из ps
, но это дает мне бессмысленные цифры. Вот усеченный пример:
$ ps -eo pcpu,pid | sort -n
%CPU PID
...
36.5 26403
38.6 28295
39.0 11741
42.6 11736
58.6 15960
61.4 21989
63.0 21939
65.5 18017
66.0 20708
67.3 22040
73.2 31950
80.0 11740
83.6 22091
109 16648
171851 22888
171851 22938
171856 23191
171858 23241
171866 24681
171875 26996
171895 30277
172376 26084
172449 25530
top
сообщает процент ЦП 0,0 для более поздних pid. Что тут происходит? Как я могу убедить ps
чтобы указать здесь правильный процент ЦП? В качестве альтернативы можно указать top -b -n1
дать мне полную ARGV для процессов, о которых он сообщает? Страница руководства не освещена.
ИЗМЕНЕНО ДОБАВИТЬ:
Если я сделаю ps -eo pcpu,pid --sort -pcpu | head
, Я по-прежнему получить плохие числа:
%CPU PID
343702 23762
343653 22570
109 16648
83.6 22091
73.3 31950
67.3 22040
66.0 20708
ИЗМЕНЕНО ДАЛЕЕ ДОБАВИТЬ:
Системы, на которых я видел это до сих пор, являются реальным оборудованием: системы x86_64 Debian Squeeze, одна с ядром 2.6.32-5-amd64, а другая с 2.6.39-bpo.2-amd64. Первый имеет 32 ядра, второй - 12. Один - Opteron с 192 ГБ оперативной памяти, другой - Xeon с 72 ГБ.
Чем больше я смотрю на это, тем больше похоже на простую ошибку в ps
это показывает высокие числа для процессов с очень низкой активностью, но я не хочу полагаться на это, пока не узнаю больше.
Как я могу убедить ps дать мне правильный процент CPU?
Как насчет этого:
ps -eo pcpu,user,pid,args --sort -pcpu | head
можно сказать
top -b -n1
дать мне полную ARGV для процессов, о которых он сообщает?
-c : Command line/Program name toggle
Starts top with the last remembered 'c' state reversed. Thus, if top was displaying command lines,
now that field will show program names, and visa versa. See the 'c' interactive command for addi‐
tional information.