Я администрирую большое количество серверов, и эта проблема у меня возникает только с Ubuntu 10.04 LTS: я запускаю сервер при нормальной нагрузке (скажем, средняя нагрузка 3.0 на 8-ядерном сервере). Команда "top" показывает процессы, занимающие определенный% ЦП, которые вызывают эту среднюю нагрузку: скажем,
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11008 mysql 20 0 25.9g 22g 5496 S 67 76.0 643539:38 mysqld
ps -o pcpu,pid -p11008
%CPU PID
53.1 11008
, все согласованно.
Внезапно процесс, вызывающий среднюю загрузку, исчезает «сверху», но процесс продолжает работать нормально (хотя и с небольшим снижением производительности), а средняя загрузка системы становится несколько выше. Вывод ps -o pcpu становится поддельным:
# ps -o pcpu,pid -p11008
%CPU PID
317910278 1587
Это произошло как минимум с 5 разными серверами (разное новое оборудование IBM System X), на каждом из которых запущено разное программное обеспечение: один httpd 2.2, один mysqld 5.1 и один TCP-сервер Twisted Python. Каждый раз ядро находилось между 2.6.32-32-сервером и 2.6.32-40-сервером. Я обновил некоторые машины до 2.6.32-41-server, и на них этого еще не произошло, но ошибка возникает редко (примерно раз в 60 дней).
Это от пораженной машины:
top - 10:39:06 up 73 days, 17:57, 3 users, load average: 6.62, 5.60, 5.34
Tasks: 207 total, 2 running, 205 sleeping, 0 stopped, 0 zombie
Cpu(s): 11.4%us, 18.0%sy, 0.0%ni, 66.3%id, 4.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 74341464k total, 71985004k used, 2356460k free, 236456k buffers
Swap: 3906552k total, 328k used, 3906224k free, 24838212k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
805 root 20 0 0 0 0 S 3 0.0 1493:09 fct0-worker
982 root 20 0 0 0 0 S 1 0.0 111:35.05 fioa-data-groom
914 root 20 0 0 0 0 S 0 0.0 884:42.71 fct1-worker
1068 root 20 0 19364 1496 1060 R 0 0.0 0:00.02 top
Сверху не отображается ничего, вызывающее высокую нагрузку, но у меня есть два сильно загруженных экземпляра mysqld, которые внезапно показывают сумасшедшие %ЦПУ:
#ps -o pcpu,pid,cmd -p1587
%CPU PID CMD
317713124 1587 /nail/encap/mysql-5.1.60/libexec/mysqld
и
#ps -o pcpu,pid,cmd -p1624
%CPU PID CMD
2802 1624 /nail/encap/mysql-5.1.60/libexec/mysqld
Вот цифры из
# cat /proc/1587/stat
1587 (mysqld) S 1212 1088 1088 0 -1 4202752 14307313 0 162 0 85773299069 4611685932654088833 0 0 20 0 52 0 3549 27255418880 5483524 18446744073709551615 4194304 11111617 140733749236976 140733749235984 8858659 0 552967 4102 26345 18446744073709551615 0 0 17 5 0 0 0 0 0
14-е и 15-е числа по
man proc
должны быть
utime %lu Amount of time that this process has been scheduled in user mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK). This includes guest time, guest_time (time spent running a virtual CPU, see
below), so that applications that are not aware of the guest time field do not lose that time from
their calculations.
stime %lu Amount of time that this process has been scheduled in kernel mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK).
На обычном сервере эти цифры увеличиваются каждый раз, когда я проверяю / proc / PID / stat. На сервере с ошибками эти числа застревают на смехотворно высоком значении, например 4611685932654088833, и не меняются.
Кто-нибудь сталкивался с этим багом?
Я думаю, это может быть ошибка в procps
пакет вместо ядра. Не видел описанной вами ошибки, но похожие ошибки на протяжении многих лет в разных дистрибутивах, да.
Если речь идет о procps, есть ли исправление для Ubuntu 10.04 LTS? Понятия не имею, не пользовался им очень-очень давно, и даже последний раз был в далекой-далекой галактике ...