3

Посмотрев вывод top на нашем сервере, один из моих коллег сказал мне, что тот факт, что некоторые процессы получили менее 100% CPU, был вызван тем, что я выполнял слишком много процессов. Он добавил, что, основываясь на его опыте, если я запустил менее 6 процессов, то, вероятно, все процессы будут иметь 100% CPU.

Я не хочу раздражать других пользователей, но сомневаюсь, что он сказал, что это правильно. Сервер имеет 16 ядер, и текущая средняя загрузка составляет от 10 до 11. Из того, что я узнал, он не перегружен. Но я не знаю, почему некоторые процессы просто получают менее 100% процессорного времени? Это действительно из-за меня?

Спасибо и всего наилучшего!

А вот и вывод top:

top - 16:34:13 up 32 days,  1:36, 12 users,  load average: 10.61, 10.39, 10.22
Tasks: 380 total,  10 running, 370 sleeping,   0 stopped,   0 zombie
Cpu(s): 55.0%us,  1.7%sy,  0.0%ni, 42.2%id,  0.5%wa,  0.1%hi,  0.4%si,  0.0%st
Mem:  130766620k total, 39859784k used, 90906836k free,   849412k buffers
Swap: 47351548k total,   279456k used, 47072092k free, 19792956k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        
17197 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4510:11 MLtest                                                                                       
28762 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4633:01 MLtest                                                                                       
29249 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4623:03 MLtest                                                                                       
29560 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4626:59 MLtest                                                                                       
 4904 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4757:12 MLtest                                                                                       
 5143 tim    18  -2 1315m 1.3g 1504 R  100  1.0   4759:40 MLtest                                                                                       
29389 tim    18  -2 1315m 1.3g 1504 R   99  1.0   4622:11 MLtest                                                                                       
 5285 tim    18  -2 1315m 1.3g 1504 R   97  1.0   4758:49 MLtest                                                                                       
 4763 tim    18  -2 1315m 1.3g 1504 R   93  1.0   4754:22 MLtest                                                                                       
 9456 zma    18  -2  206m  85m  11m S   48  0.1  60:46.78 dropbox                                                                                         
 7527 vals   18  -2 1266m 436m  42m S    4  0.3 613:57.10 MATLAB                                                                                          
 2903 root   15  -5     0    0    0 S    1  0.0  19:00.01 rpciod/0                                                                                        
19133 vals   18  -2 1380m 503m  42m S    1  0.4 798:47.99 MATLAB                                                                                          
12454 tim    18  -2 19248 1588 1024 R    1  0.0   0:48.88 top                                                                                             
   12 root   RT  -5     0    0    0 S    1  0.0  35:01.05 migration/3                                                                                     
 2924 root   15  -5     0    0    0 S    1  0.0  27:20.92 nfsiod                                                                                          
12690 jun    18  -2  913m  84m 2684 S    1  0.1 121:55.65 MATLAB                                                                                          
19650 jun    18  -2 19244 1600 1028 S    1  0.0   6:5

2 ответа2

2

Старое правило, которое я использую:

Допустимая средняя нагрузка ≤ количество ядер +1

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

Падение, которое вы видите в% cpu для более чем 6 одновременных процессов, может быть вызвано множеством различных факторов (cpus - не единственный общий ресурс ...), чтобы узнать, какой из них вам понадобится для профилирования ваша программа

В любом случае, поскольку эта машина, по-видимому, используется несколькими пользователями для расчетов, я настоятельно рекомендую настроить некоторые формы планирования заданий, даже для доступа к оболочке (вы также можете ввести некоторую балансировку нагрузки таким образом). Для этого есть несколько инструментов, я использую Torque/PBS и Sun Grid Engine (оба проекта OSS).

1

Из того, что я вижу в top выводе, который вы опубликовали, я думаю, что mltest не может съесть больше циклов, чем это. Это потребляет почти 8x 100%. Я не специалист по архитектуре процессора, но я думаю, что вы достигли предела этой многоядерной технологии. Сколько ядер на процессор у вашего сервера?

Кстати, у вас есть нагрузка 10 или 11 на вашем "Quad-Quad Machine"? Или это средний "% CPU", который вы видите? load - это число процессов, ожидающих цикл ЦП, поэтому 10 довольно велико.

Обновление после комментария:
Спасибо за переформатирование top вывода и за уточнение относительно значения load . Я вроде не согласен с моими коллегами здесь - нагрузка в 10 довольно высока, независимо от того, сколько у вас ядер. Но вы проводите тест производительности или тест выгорания процессора?

Дополнительные ответы см. В перекрестном сообщении на ServerFault: https://serverfault.com/questions/71510/cpu-for-a-process.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .