Интересные статьи

После решения задачи, хочется рассказать об этом

504 ошибка битрикс на стороне сервера

504 gateway time-out nginx/1.4.2 битрикс

Данная ошибка частенько вылетает при открытии страницы сайта. При просмотре логов сайта можем обнаружить следующую ошибку upstream timed out (110: Connection timed out) while reading response header from upstream В данном случае сервер nginx отправил запрос на apache и не дождался ответа. По умолчанию время ожидания ответа состовляет 60с. Бывает что сайт очень тяжелый, много скриптов и если ты уверен в работоспособности всех модулей и компонентов, можно добавить времени ожидания, прописав в конфиге nginx в секции location следующие строки

proxy_connect_timeout 300; 
proxy_send_timeout 300;
proxy_read_timeout 300;
  • На Centos конфиг хранится по следующему пути \etc\nginx\nginx.conf
  • Логи сайта храниятся в папке \var\www\www-root\data\logs\

В моем случае это не помогло. Ошибка 504 gateway time out в битрикс вылетала из-за загруженности процесса httpd на 85%.

Переведя сайт на CGI PHP 5.4.45 полетели ошибки в логах Timeout waiting for output from CGI script /var/www/php-bin-isp-php56/www-root/php и Script timed out before returning headers: php При помощи команды top я увидел загруженность процесса php на 75%. Значит все дело в исполнении php скрипта. Похоже, что есть какая-то ошибка в РНР-скриптах сайта, потому как подключений совсем немного, а нагрузка от обработки ощутимая:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
31386 www-root 20 0 619956 184084 14328 S 75.0 18.1 1:19.59 php

Как узнать, какой запрос в настоящий момент выполняет php-cgi процесс

Покопавшись в интернете, я собрал очень полезные утилиты для работы с процессами на стороне сервера. Установку делал с помощью yum install strace Благодаря команде lsof, описание дал ниже, увидел последний файл, который был открыт процессом php. Это xml-файл yandex_torg04042015.php создавался агентом CCatalog::PreGenerateXML битрикс для системы Яндекс.Товары Происходил экспорт товаров в файл из инфоблока каталога товаров в количестве 15944шт Соответственно убрав выполнение агента, сайт быстренько открылся. Т.к. ошибка возникала на тестовом сервере, убрал выполнение всех агентов прописав в dbconn.php

define("NO_AGENT_CHECK", true);
define("NO_AGENT_STATISTIC", true);
  • top Выводит список процессов и информации о них в режиме реалтайм
  • mod_status Позволяет контролировать в реальном времени производительность сервера
  • strace -p PID Показывает системные вызовы, которые происходят в данный момент в процессе
  • ps ax| grep PID Выдача информации о состоянии процессов
  • lsof -p PID Показывает список файлов, открытых процессом
  • kill -SIGKILL PID Убивает процесс