Добрый день, стал замечать такую проблему: Есть сервер apache 2, он стоит на ubuntu. На сервере есть несколько сайтов, в какое то время 1 из сайтов начинает долго грузиться и выходит 504 ошибка. Еще через некоторое время выходит ошибка 502. Помогает перезагрузка всего сервера, как можно решить эту проблему? Вот лог ошибок когда выходит ошибка 504: Код (Text): 2017/08/01 16:05:44 [error] 1235#0: *3567 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.33, server: domen.ru, request: "GET /index.php?id=416 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-domen.sock", host: "domen.ru" 2017/08/01 16:06:44 [error] 1235#0: *3490 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.33, server: domen.ru, request: "GET /index.php?id=416 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-domen.sock", host: "domen.ru" 2017/08/01 16:06:57 [error] 1235#0: *3567 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.33, server: domen.ru, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-domen.sock", host: "domen.ru" А вот лог ошибок когда через некоторое время выходит ошибка 502: Код (Text): 2017/08/01 16:43:06 [error] 1235#0: *6285 connect() to unix:/var/run/php5-domen.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 192.168.1.33, server: domen.ru, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-domen.sock:", host: "domen.ru" 2017/08/01 16:43:24 [error] 1235#0: *6346 connect() to unix:/var/run/php5-domen.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 192.168.1.33, server: domen.ru, request: "GET /manager/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-domen.sock:", host: "domen.ru"
Вас не DDOS-ят случаем? По легкой так, что очередь не сразу набирается. --- Добавлено --- И да, fastcgi до пыхи...при том, что у вас apache2. У вас там голый apache2+php-fpm чтоли? Если так, то ваш сайт может валиться просто от обилия запрашиваемых ресурсов со страницы. Если на странице есть пара десятков картиночек, скриптоков да стилей, то с десяток клиентов уже могут положить сервер с такой архитектурой. А то и меньше. Да что там. На медленных запросах можно и соло его уложить. --- Добавлено --- Собсно, вопросы: 1) Почему php-fpm, а не mod_php, коль уж apache2? Таки mod_php для апача роднее, и работает быстрее, чем php_fpm без лишних накладных расходов на межсерверное взаимодействие(да, php-fpm это таки тоже сервер); 2) Почему apache2, коль уж php_fpm? Почему не nginx, с которым php_fpm использовать логичнее? 3) Почему наружу торчит голый apache2, если это правда так? Почему не закрыт тем же nginx, на который заворачивалась бы статика и который бы собирал очередь на себя? Собсно, по-хорошему есть 2 популярные, проверенные архитектуры из свободного ПО: 1) nginx+apache/mod_php; 2) nginx+php_fpm; Либо либо. Сопоставимы по скорости работы и потреблению ресурсов. При правильной настройке и выпиливании лишних модулей с апача, первая конфигурация будет даже выигрывать у второй. На практике же это все скорее вопрос вкусовщины. Главное - чтобы перед PHP-сервером стоял легкий быстрый реверс-прокси, не боящийся высококонкурентных запросов.
Сервер уже был настроен и работал до меня, так что я не знаю почему он именно так настроен. Судя по ответу сервера все таки там стоит nginx/1.8.1
Сколько запросов в сутки? В час? Пока что основная версия - сервер тупо не справляется. --- Добавлено --- Давно вообще проблема появилась? Раньшее ее не было? Что еще на сервере работает?
На сервере в общем такая система что под каждый сайт создается свой пользователь и свой демон. Раньше все работало нормально, но с неделю уже где то 1 сайт вырубается. Сайт мало посещаемый и почему падает именно он, так и не удалось понять. --- Добавлено --- Но каждый раз перезагружать весь сервер, не вариант. если перезагружаю php5-frm, то это проблему не решает. Не могу понять, куда копать
Для начала - копать надо логи. Особенно error_log php-fpm(надеюсь, он есть). На втором месте - апач, на третьем - нжинкс. Далее - прикручивать к своему колхозу какой-либо профилировщик, умеющий собирать статистику и, в идеале, строить графики. Чтобы понять, что происходит вообще. Для начала - можно просто прикрутить xdebug, и через него попробовать снять stamp - это профилировка работы. Дело затратное. Включили стампер, разок дернули сайт, выключили стампер. Результат сохраняется в текстовый файл, понятный для человека. Можно самому его изучать. Можно найти ПО, которое на его основе запилит диаграммы и автоматически анализ проведет.
Обратился к админам, поставили мне забикс, по его показателям, вроде все нормально. Авторизовался в PHPMyAdmin от пользователя под которым работает сайт, зашел в раздел "состояния", там есть график: Вот меня интересует график "Соединения / Процессы", судя по графику пишет что там 1 процесс и 1625 соединений, это нормальное значение? --- Добавлено --- При чем, если я начинаю нажимать F5, то на графике показывается 1 процесс и 20-35 соединений, откуда могут браться 1625? Ведь это очень большое число.
Есть сервер 1, там лежит несколько сайтов. Есть сервер 2, там лежит СУБД. Все сайты на сервере 1 обращаются к серверу 2. На сервере 1 стоит nginx+php_fpm Каждый сайт открывается от своего пользователя. Вот что говорит забикс о сервере 1 "исходящий трафик"
это ни о чем не говорящие данные. это может быть и статика типа фильмов - сервер не сильно-то напрягается её отдавать с диска. по процессам можно плюс-минус понять к какой пхп-машине приходит слишком много и оценить это много как полезное или как дос говнокода точно нигде нет? индексы?
Шутишь? Там за несколько секунд набегает несколько тысяч запросов к серверу. Разве что там на клиенте каждый символ на странице не дергается отдельным запросом. Автор, это либо DDOS, либо поздравляю, вы переросли сами себя и вам нужен сервер попросторнее. И вперед к светлому будущему.
А можно ли как то посмотреть на сервере где лежит СУБД посмотреть сколько запросов делал какой пользователь?
Для бд так же есть всякие тулзы для сбора статистики. mysql вроде и сам умеет в ее сбор, если мне память не отшибло.