Периодически на сервере стали возникать проблемы IO диска и начинал тормозить CentOS 7 или CloudLinux 7, а apache зависать на php процессах. Программа iotop показывала, что иногда php скрипты вдруг как будто заедали, переставали работать и начинали копиться процессы и при этом показывали нагрузку IO в 99%. Что приводило к зависанию http сервера. А то и могло привести к зависанию самого сервера.
Такие данные можно увидеть с помощью программы iotop.
Видно что нагрузка идет при большом количестве запросов от http сервера. От чего и тормозит ОС centos 7 или cloudlinux 7.
Ничего не менялось при использовать PHP как suPHP или FastCGI, и даже c модулем mod_lsapi.
Долгое исследование проблемы и обращение в поддержку CloudLinux открыли завесу тайны.
Что делать если тормозит CentOS 7 или CloudLinux 7?
Вы никогда не поверите откуда появилась проблема. Оказывается о нас позаботились разработчики ядра. Как так, ведь надо экономить энергию на планете и заботить об экологии, значит надо включить для процессора и дисковой системы экономичный режим по умолчанию.
Если вы наберете
# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Вы вдруг обнаружите откуда идут тормоза на CloudLinux или Centos. а ларчик открывается просто.
# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor powersave powersave powersave powersave
Ваш процессор работает в режиме сохранения энергии, то есть он все время понижает частоту процессора, что бы он якобы не сильно грелся и зря не расходовал энергию.
Режимы бывают
- powersave — энергосберегающий (вообще всё тормозит, всегда. Часто та постоянно внизу.)
- ondemand — меняет частоту по требованию (причем тормозит с IO wait хотя по идеи должен поднимать когда идет нагрузка)
- performance — максимальная частота всегда.
- и другие, которые нам не интересны.
О других режимах можно почитать тут.
Что бы спасти положение нам нужна частота максимальная всегда. Иначе для сайтов это постоянные тормоза, что бы раскручивать диск и выполнять процессы.
В CentOS 7 и Cloudlinux 7 есть отличная утилита, которая решает эту проблему. И задаёт постоянно максимальный режим.
Эта демон Tuned. По умолчанию он работает в режиме powersave или ondemand. Что для сайтов или хостинга грозит постоянным тормозами или медленной работой сайтов, вплоть до подвисания Apache сервера. Почему так сделано? Мне вообще это не понятно. Подробно о его проблемах можно почитать тут.
Поэтому мы смело устанавливаем максимальный режим.
# tuned-adm profile throughput-performance
После чего получаем на нашем сервере максимальную производительность и никаких тормозов.
Есть еще один узкий момент. Это драйвер intel_pstate. По словам поддержи CloudLinux он так же создаёт проблемы, поэтому если вы видите его вот так:
# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver intel_pstate intel_pstate intel_pstate intel_pstate
То можно смело его отключать.
Немного информации об этом драйвере можно почерпнуть информацию на этой странице.
Редактируем фаил /etc/default/grub
и добавляем в строку GRUB_CMDLINE_LINUX=" тут что то"
intel_pstate=disable
Например: GRUB_CMDLINE_LINUX=" тут что-то intel_pstate=disable rhgb quiet"
Сохраняем.
Пересоздаём новый grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
Перезагружаемся
# shutdown -r now
Всё. Надеюсь теперь ваша жизнь станет веселее, а клиенты не будут страдать от диких тормозов сайтов.
P. S. Если у вас Ubuntu или Linux Mint и тому подобное, то тоже можно ускорить, и избавиться от тормозов О. С. Особенно это актуально если у вас домашней комп на этой системе. Надо установить tuned-adm и использовать его. Вся информация на этой странице.
Либо выполнить
#sudo cpufreq-set -g performance
Для тех кого мало памяти на сервер, и он всё равно, иногда, наблюдаете такую проблему.
Если у вас мало памяти на сервере с Centos или CloudLinux, vps или vds, то cache с буферором будут сжирать у вас память. По идеи при нуждах программ они должны скидывать на диск и высвобождать часть. Но как показывает опыт, этот бред ядра Centos ни черта нормально не работает и похоже просто тупо не успевает сбрасывать лишний кэш. Часто может дойти даже до зависания.
Поэтому что бы высвободить память мы делаем такую вещь.
В файле /etc/sysctl.conf вносим:
vm.dirty_background_ratio = 10 vm.dirty_ratio = 40
После синхронизируем данные кэша и диска, очистим кэш и сохраним параметры:
sync; echo 3 > /proc/sys/vm/drop_caches; sysctl -p
Информация взята отсюда
После чего мы вносим в крон
# crontab -e 0 4 * * * sync; echo 1 > /proc/sys/vm/drop_caches
Подробно про чистку кэша и почему это приходится делать описано тут. Так же обратите внимание, что такая чистка не рекомендуется, так как из-за некоторых проблем вы рискуете создать проблемы с потерями каких либо данных. Подробно описано в источнике. Однако на слабых машинах я пока не вижу другого выхода. Если вы его знаете, напишите в комментариях.
На этом всё. Удачи с вашим сервером!
Если вам понравилась статья, и вы хотите быть в курсе новых статей, не забудьте подписаться на нашу группу ВКонтакте или другие социальные сети.
Или репостните другу! Тем самым вы поддержите наш проект. Спасибо!
admin
Слава божественным силам и разработчикам CloudLinux! Наконец то кто-то заметил этот глюк тормоза на CentOS 7. (видно поддержку CloudLinux затюкали)
CloudLinux выпустил тюнер для своей операционной систимы. Не я серьезно! Это крутая штука. Борьба с глючными тормозами Centos всех уже порядком достала.
Теперь ничего не надо делать в ручную. Просто поставьте эту программу
http://docs.cloudlinux.com/index.html?tuned-profiles-cloudlinux.html
admin
И самое главное, меняйте HDD диск на SSD и все проблемы уйдут в прошлое. Этих тормозов просто не будет.
Alexander
Не уйдёт. Проверено.
Дмитрий
"Для тех кого мало памяти на сервер, и он всё равно, иногда, наблюдаете такую проблему."
Это на каком языке написано?
admin
Очепятка, с опиской.