Задать вопрос
@svsova

Кто виноват сервер не тянет или скрипты надо допиливать?

У меня есть развлекательный сайт https://www.vip-nickname.ru/.
Сайт на сервере VPS единственный (Процессор 2x2200, Память 2048, OS centos6-x86_64) .

Есть какая-то проблема с его загрузкой. В основном работает отлично страницы листаются быстро, время выполнения php сценариев примерно 0,02 с. Но в час пик суббота-воскресенье пользователей online примерно до 100 чел. начинаются тормоза. Бывает, что страницы не грузятся вообще, ни то-что долго, а вообще не грузятся.
5e4d3f834487e261229025.png
Оперативка и проц на сервере не загружены, судя по статистике запас ещё приличный.
5e4d4023b2ad6359552442.png
5e4d402caf0fa812485124.png
Когда открываю консоль и перезагружаю web-сервер перезагружаю страницу всё начинает летать.

Где капать не понимаю, процессов лишних вроде нет. Буду благодарен за любые мысли.
  • Вопрос задан
  • 606 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
Чё тут думать тупо смотреть логи и исправить подъему
Проблему, вместо того чтобы гадать на кофейной гуще как предлагает автор
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Буду благодарен за любые мысли.

Мысль - а неплохо бы для кода профилирование с таймингом сделать, можно посмотреть на какой операции обычно происходит затык при нагрузке.
Ответ написан
@Saty
Переходите с апача на nginx. Или, хотя бы, отдавайте статику через nginx (картинки, стили, js и прочее). Очень сильно сможете поднять порог, когда сервер от подключений ложится.
Ответ написан
Комментировать
@metajiji
php-fpm с настроенным перезапуском воркеров, например по количеству реквестов - 1000 будет норм. + Запись в логи slow реквестов, тоже нужно настроить - указать тайм-аут выполнения. Ну и для кучи автоскейлинг воркеров, чтобы в простое было штук 15, а при нагрузке можно и побольше, например 50.

На перспективу,
Когда поймёте, что сервер закончился, можно вставить следующий, это значит просто запустить ещё одну впс с php-fpm.
Если есть аплоады, то нужно решать, как их сделать общими, если запись не очень активная, glusterfs может подойти или nfs. Оба решения так себе, в идеале аплоады лить в cdn.
И да базу расширить между нодами нужно будет :)
Ответ написан
Комментировать
@svsova Автор вопроса
Основная причина была - ограничение максимально возможных одновременных подключений к Apache.

"server reached MaxClients setting, consider raising the MaxClients setting"


Увеличил в 3 раза, и другие настройки сервера на эту же тему подправил.
Сразу после устранения проблемы трафик вырос примерно +20% онлайн еще больше
5e4e3c5f30a09385123300.png

Другие предложения тоже рассмотрю, там придется похоже времени побольше потратить.

Благодарю ВСЕХ за помощь!
Ответ написан
Комментировать
unnforgiven
@unnforgiven
Ит специалист.
Где мониториг io?
Ответ написан
Комментировать
FoxCloud
@FoxCloud
Хостинг и облачные сервисы
1. Если сайт работает на php-fpm, оптимизируйте php-fpm. Обратите внимание на параметры ниже. К примеру значения для теста могут быть:
emergency_restart_threshold 10
emergency_restart_interval 1m
process_control_timeout 10s

2. Если бэкенд апач (httpd), рекомендуем воспользоваться возможностями server-status от апач.

Конф файл:
/etc/httpd/conf/httpd.conf

Внесите в конфигурационный файл параметры

SetHandler server-status
Order deny,allow
Deny from all
#Разрешите подключение с вашей сети
#Allow from 123.123.123.0/20


Протестируйте конфиг апача
httpd -t или apachectl configtest

Перезагшрузите апач
service httpd reload или restart (если reload не сработал)

В момент нагрузки посмотрите статус по ссылке:
xn--__-7kcbjalibbz8fqdckb/ixstatus

3. В момент нагрузки посмотрите TOP на сервере.
Проанализируйте процессы.

4. Если используете php-FCGI, внесите также настройки
Чаще всего файл конфигурации тут:
/etc/httpd/conf.d/fcgid.conf

Внесите параметры в конец файла и перезагрузите апач.
FcgidProcessLifeTime 14400
FcgidIdleScanInterval 60
FcgidIdleTimeout 60
FcgidMaxProcesses 3000
FcgidMaxProcessesPerClass 500
FcgidMaxRequestsPerProcess 100
FcgidMinProcessesPerClass 0
FcgidMaxRequestLen 200000000
FcgidIOTimeout 300

Протестируйте конфиг апача
httpd -t или apachectl configtest

Перезагрузите апач
service httpd reload или restart (если reload не сработал)

Выше приведены несколько вариантов, которые вам могут помочь.
Если не поможет, нужна диагностика проблемы, для выявления решения.
Желаем вам удачи в решении вопроса!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы