У меня есть один проект Codeigniter, который включает в себя одну «дорогостоящую» синхронизацию. В основном я подключаюсь к удаленному серверу (работающему, вероятно, CentOS, но это все, что я знаю) через OCI8 к базе данных Oracle, выбирая около 20 000 строк, а затем обновляю локальную базу данных MySQL.
Эта синхронизация длится около 20 минут (да, MySQL может быть более оптимизирован, а что нет), но это не проблема, с которой я сталкиваюсь в настоящее время …
У меня есть выделенный сервер с двумя Xeon и 16 Гб оперативной памяти, CentOS x64, Apache 2.2.15, PHP 5.6.21 и MySQL версии 5.6.30.
Теперь, с помощью Apache 2 Handler и PREFORK MPM по умолчанию, эта синхронизация работает так, как задумано.
Если я оставлю Apache 2 Handler (я полагаю, mod_php) и поменяю MPM на WORKER или EVENT, синхронизация начнется, и PHP выплевывает белый экран смерти, в файлах журнала ничего не будет.
Если я переключаюсь на fcgi и EVENT или WORKER MPM, синхронизация начинается, и примерно через 2 минуты она выдает мне сообщение «Шлюз не получил своевременный ответ от вышестоящего сервера или приложения».
Напоминаю, что проблема не связана с серверами, так как с того момента, как я переключаюсь обратно на Apache 2.0 Handler и PREFORK, он работает как задумано.
Версия Codeigniter — 2.1.0 (да, я знаю, что обновление давно прошло, это только что унаследованный проект, и я не полностью осознаю, произошли ли какие-то изменения с файлами CORE, и парень «хорошо работает, не Это».
Любая подсказка или ссылка с подобной проблемой более чем приветствуются.
заранее спасибо
Сделать httpd -M
и посмотрим, есть ли у вас fcgid_module
в списке активных модулей Apache.
Если нет, сделайте yum install mod_fcgid
и установить его
Тогда вам, вероятно, понадобится выполнить некоторые настройки для вашей проблемы с тайм-аутом, если вы в своей настройке настроили все остальное для использования CGI / FastCGI вместо Apache 2 Handler. /etc/httpd/conf/httpd.conf
что-то вроде
<IfModule mod_fcgid.c>
FcgidIdleTimeout 1800
FcgidProcessLifeTime 1800
FcgidBusyTimeout 1800
FcgidIOTimeout 1800
FcgidConnectTimeout 20
</IfModule>
Сделать перезагрузку service httpd restart
а также service php-fpm
перезапустите (или любой другой обработчик PHP, который вы используете) и повторите попытку
@ Kosta, похоже, у вас какая-то ошибка длинного ожидания запроса к серверу. Я не могу сказать, что точно, не проверяя журналы. Я также советую вам проверить настройки времени ожидания PHP, max_execution_time, max_input_time, это также может повлиять на такие проблемы.