Я арендую виртуальный сервер на базе CentOS, на котором у меня работает около 5 активных сайтов. Несколько месяцев назад я заметил значительное снижение производительности моих сайтов.
Первым признаком было слишком много (~ 300) процессов apache, запущенных после того, как HTTP-сервер перестал отвечать. Проблема исчезла после перезагрузки, но спорадически появлялась снова через день, через неделю и так далее. Я играл с параметрами httpd.config, но не смог избавиться от этой проблемы, и единственное решение, которое я смог найти, - запланировать перезагрузку сервера каждые 1 час. Перезагрузка была довольно быстрой, поэтому временно решила проблему.
Однако пару месяцев назад я начал замечать еще одну проблему с производительностью сервера - периодически сайты просто слишком медленно реагируют.
Мне нужен совет или помощь, чтобы выяснить источник проблемы, поскольку я не уверен, что на данный момент понимаю это:
Похоже, памяти достаточно, вот результат сверху: Mem: всего 524288k, использовано 299252k, 225036k свободно, 0k буферов
Достаточно места на диске (от "vm -h"):
Filesystem Size Used Avail Use% Mounted on
vzfs 40G 28G 13G 70% /
none 3.9G 4.0K 3.9G 1% /dev
А вот информация времени выполнения об использовании ресурсов из "vmstat -S M 2 100":
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 220 0 0 0 0 8 111 0 1 6 4 90 0 0
0 0 0 220 0 0 0 0 0 0 0 272 0 0 100 0 0
0 0 0 220 0 0 0 0 0 0 0 176 0 0 100 0 0
0 0 0 220 0 0 0 0 0 0 0 132 0 0 100 0 0
0 0 0 220 0 0 0 0 0 1950 0 330 0 0 100 0 0
2 0 0 220 0 0 0 0 0 4 0 1854 21 19 60 0 0
2 0 0 210 0 0 0 0 0 4 0 1958 73 23 4 0 0
2 0 0 199 0 0 0 0 0 4 0 829 41 40 19 0 0
1 0 0 207 0 0 0 0 0 26 0 1212 47 17 36 0 0
1 0 0 206 0 0 0 0 0 4 0 1405 50 4 45 0 0
0 0 0 209 0 0 0 0 4 140 0 1251 34 5 60 0 0
0 0 0 208 0 0 0 0 0 0 0 213 1 0 99 0 0
0 0 0 208 0 0 0 0 0 0 0 353 0 0 100 0 0
0 0 0 208 0 0 0 0 0 6 0 317 0 0 100 0 0
0 0 0 206 0 0 0 0 0 0 0 299 0 0 100 0 0
0 0 0 214 0 0 0 0 12 114 0 336 0 1 99 0 0
Кстати, строки с высокими значениями CS (контекстного переключения) соответствуют моментам, когда я обновил пару страниц сайта.
Любой совет очень ценится.
Как правило, я обнаружил, что когда apache настроен так, что ему разрешено порождать больше детей, чем вы можете обработать, он зависает, когда достигает предела вашей системы. Это не очень хорошо для освобождения ресурсов, когда он засорен. Поэтому я предлагаю вам для начала немного снизить максимальное количество детей (на много) для apache. Посмотрите, сколько памяти обычно использует 1 ребенок. Затем разделите свой максимальный avl ram на то, сколько использует 1 ребенок, и вы можете использовать этот результат в качестве отправной точки для настройки оптимального количества детей.
Мой ответ может быть предвзятым, но я не считаю, что apache очень хорош в качестве веб-сервера ... Он слишком требователен к ресурсам, чем должен быть, и поэтому особенно плохой выбор для небольших сред, таких как VPS, который вы используете . Попробуйте альтернативу, такую как nginx (с php-fpm, если вы, например, используете php), или varnish и т. Д. Это не замена apache один на один, но это веб-серверы, которые я считаю намного более эффективными и менее эффективными. склонны к зависанию из-за проблем с ресурсами.
Кроме того, при публикации подобных проблем я рекомендую вам публиковать статистику таких вещей, как top
поскольку они обеспечивают более полную картину, хотя и общую, в ваше пик / трудное время.