%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BD%D0%B0%20%D0%B4%D0%B8%D1%81%D0%BA%20%D0%B2%20Linux%20(RHEL6.1)%3F.png)
У меня есть виртуальная машина с приложением на основе PHP (в Apache). Если посмотреть на активность диска, то можно увидеть постоянную скорость записи 170 Кбит/с при работающем Apache.
Когда мы применяем нагрузку, производительность сервера ограничена процессором, но это, по-видимому, напрямую связано с прыжками ввода-вывода записи на диск в 20-30 раз. График использования процессора отражает график доступа к записи на диск.
Есть идеи?
решение1
Две рекомендации:
иотоп— удобная программа, которая показывает вам использование ввода-вывода в реальном времени в формате, подобном top
команде. Это должно помочь вам определить скрипт/бинарный файл, который выполняет весь ввод-вывод. Я думаю, что это может быть уже установлено в новых ядрах, но yum может предоставить это в RHEL, если вы этого не видите.
lsof
также полезен при устранении неполадок ввода-вывода; он выводит список всех открытых файлов.
ОБНОВЛЯТЬ
Если есть "постоянная" активность диска, то это iotop
должно сказать вам, какой процесс(ы) является виновником. Что касается истории транзакций ввода-вывода: я не думаю, что история ввода-вывода где-либо регистрируется в большинстве дистрибутивов Linux, но вы можете добавить задание cron.
Как пользователь root откройте crontab crontab -e
и добавьте следующие две строки:
* * * * * /bin/date >> /var/log/iotop; /usr/local/bin/iotop -bot --iter=3 -q >> /var/log/iotop
* * * * * /bin/date >> /var/log/lsof; /usr/bin/lsof -b -w >> /var/log/lsof
Это делает дампы iotop
и lsof
выводит в журнал каждую минуту. Добавьте скрипт logrotate для каждого, чтобы файлы не занимали все ваше пространство, например:
someuser@myhost:~> cat /etc/logrotate.d/lsof
/var/log/lsof {
rotate 3
weekly
compress
missingok
notifempty
}
решение2
Похоже, что несвязанная фоновая задача удаляла содержимое каталога /tmp, куда предварительно компилировался php. В результате процесс предварительной компиляции php начался снова, что привело к постоянной активности диска.