У меня есть сервер CentOS-5, который очень мало загружен. Типичный вывод команды "sar" выглядит следующим образом:
02:20:01 PM CPU %user %nice %system %iowait %steal %idle
02:30:01 PM all 0.63 0.00 1.23 0.31 0.00 97.84
02:40:01 PM all 0.92 0.32 1.34 0.45 0.00 96.97
02:50:01 PM all 0.76 0.00 0.93 0.77 0.00 97.54
03:00:01 PM all 0.41 0.00 0.72 0.15 0.00 98.72
03:10:01 PM all 0.78 0.32 1.49 1.83 0.00 95.58
03:20:01 PM all 0.27 0.00 0.50 0.62 0.00 98.61
Однако я наблюдаю, что каждую ночь в 4:10 загрузка процессора очень высока. Это происходит почти каждую ночь, за исключением нескольких дней в месяц. Команда "sar" показывает что-то вроде этого:
03:00:01 AM all 0.10 0.00 0.10 0.11 0.00 99.68
03:10:01 AM all 0.08 0.32 0.18 0.21 0.00 99.21
03:20:01 AM all 0.03 0.00 0.03 0.19 0.00 99.76
03:30:01 AM all 0.01 0.00 0.02 0.06 0.00 99.91
03:40:02 AM all 0.75 0.32 3.21 15.43 0.00 80.28
03:50:01 AM all 0.95 0.00 3.43 9.25 0.00 86.36
04:00:01 AM all 0.69 0.00 3.79 4.86 0.00 90.66
04:10:01 AM all 22.38 0.54 4.47 30.92 0.00 41.69
04:20:01 AM all 2.99 0.02 4.58 4.95 0.00 87.46
04:30:01 AM all 0.34 0.00 0.61 13.22 0.00 85.83
04:40:01 AM all 0.05 0.32 0.17 0.52 0.00 98.95
04:50:01 AM all 0.22 0.00 0.36 0.11 0.00 99.32
05:00:01 AM all 0.23 0.00 0.36 0.12 0.00 99.28
Как я могу определить, что вызывает этот пик использования ЦП, iowait и т. Д. Я изучил / var / log / messages, но не смог определить. В то время нет других заданий cron или других задач, которые должны выполняться. Поскольку это отображается под% user, я могу только понять, что это какой-то пользовательский процесс. Как я могу точно определить причину?
Это когда cron.daily
скрипты запускаются ... По умолчанию запускается ежедневно сразу после 4:00.
Из /etc/crontabs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily <-- THIS ONE!!
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
И в /etc/cron.daily
.
Вероятно, виноват ваш mlocate.cron
, который работает updatedb
и может быть довольно интенсивным в некоторых системах:
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
Как указано в / etc / crontab, ежедневный автоматический запуск cron запланирован в 04:02:
[...]
02 4 * * * root run-parts /etc/cron.daily
Запуск ls /etc/cron.daily/ покажет вам запущенные команды, запланированные на 04:02 (они выполняются последовательно). Вы можете легко изменить их, чтобы выводить нагрузку «до» и после их выполнения.
Однако, если это стандартная установка CentOS, очень высока вероятность, что скрипт, ответственный за высокую нагрузку, - это либо mlocate.cron, 0logwatch (если он установлен), либо logrotate.
mlocate выполнит полное сканирование файловой системы (что объяснит увеличенное время ожидания ввода-вывода в вашей системе), 0logwatch проанализирует ваш файл журнала (который может быть довольно большим, что приведет к операциям ввода-вывода), а logrotate также может создать значительный ввод-вывод. o если он перемещает файл между файловыми системами.
Поскольку вы говорите, что это происходит в 4:10 почти каждый день, грубым способом было бы запустить ps aux
в cron каждую минуту с 4:05 до 4:15 и получить результат, записанный в файл. Затем вы можете проверить% использования ЦП командой, которая потребляет ваш процессор.
Скорее всего, это работа cron - возможно, "locationb" обновляется?
Добавление вашего собственного вывода cron "ps" на ночь может помочь обнаружить виновника.