Я исследую странная ситуация с экстремальной нагрузкой (но низкий ЦП, IOWAIT, SYS, дисковая / сетевая активность) на одном из наших серверов Linux, на котором работает множество экземпляров базы данных Oracle.
При некоторой загрузке процессора на машине все выглядит вполне нормально, как мы видим в vmstat:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
2 0 193312 1959440 403368 38270032 0 0 2504 25 4660 3916 16 5 78 1 0
1 0 193312 1899352 403560 38277932 0 0 2198 1720 5175 4675 14 5 79 2 0
1 3 193312 1878992 403584 38279024 0 0 13900 14261 2054 2704 6 1 93 1 0
Как только машина работает на холостом ходу, он показывает странное поведение:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
102 0 173164 1909664 408596 38271676 0 0 1124 1094 2312 2345 4 3 91 3 0
15 5 173164 1909968 408620 38271904 0 0 256 677 472 843 2 0 98 0 0
94 0 173164 1858988 408664 38311548 0 0 292 161 1786 1600 5 2 92 1 0
51 0 173164 1859832 408664 38311856 0 0 849 957 1044 1436 2 1 95 2 0
200 12 173164 1859708 408680 38311840 0 0 96 536 559 636 1 0 99 0 0
60 0 173164 1844480 408704 38328308 0 0 288 653 632 830 1 1 98 0 0
124 0 173164 1845340 408712 38329748 0 0 144 947 1746 1926 3 2 95 1 0
48 1 173164 1850432 408752 38329792 0 0 268 844 1783 1862 2 3 94 1 0
509 0 173164 1882880 408752 38329832 0 0 60 12 1893 1726 2 2 95 1 0
125 0 173164 1884208 408768 38329868 0 0 160 816 1918 2426 4 1 95 0 0
Как вы можете видеть в первом столбце, у нас есть высокая длина очереди выполнения, какие sar -q 1
подтверждает:
04:18:29 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
04:18:30 PM 3 1288 15.13 9.40 11.92
04:18:31 PM 1 1298 15.13 9.40 11.92
04:18:32 PM 34 1298 15.13 9.40 11.92
04:18:34 PM 3 1298 15.28 9.52 11.95
04:18:35 PM 64 1302 15.28 9.52 11.95
04:18:36 PM 5 1302 15.28 9.52 11.95
04:18:37 PM 0 1302 15.28 9.52 11.95
04:18:38 PM 62 1302 15.28 9.52 11.95
04:18:39 PM 13 1302 17.26 10.03 12.10
04:18:40 PM 3 1303 17.26 10.03 12.10
04:18:41 PM 90 1302 17.26 10.03 12.10
04:18:42 PM 7 1302 17.26 10.03 12.10
04:18:43 PM 17 1302 16.12 9.91 12.05
04:18:44 PM 400 1302 16.12 9.91 12.05
Как следствие, средняя нагрузка тоже выглядит очень пугающей (используя uptime
):
16:21:43 up 16 days, 2:16, 2 users, load average: 78.91, 28.88, 18.29
Как только происходит некоторая загрузка процессора, все вроде нормализуется:
15:18:27 up 16 days, 1:13, 1 user, load average: 0.95, 1.37, 1.81
ps r -A
ничего интересного не показывает (подозреваю, что многие процессы в R
или D
состояние - но это не так):
PID TTY STAT TIME COMMAND
28947 pts/0 R+ 0:00 ps r -A
Я могу исключить многие недолговечные процессы как причину.
Вопросы:
В последней версии ядра (после 2.6.32) есть ошибка, из-за которой система резко увеличивает среднюю нагрузку в режиме ожидания из-за изменений в методе расчета средней нагрузки.
Для получения дополнительной информации вы можете проверить официальный сайт Red Hat. Почта.
Также есть открытое дело в bugzilla.
Это скорее к сведению (пока я не могу комментировать): очередь выполнения подсчитывает потоки, а не процессы. Чтобы найти работающие и бесперебойные спящие потоки, используя ps
ты можешь использовать:
ps -eLo stat,pid,user,command | egrep "^STAT|^D|^R"