mod_fcgid: невозможно применить слот процесса для ошибки - PullRequest
2 голосов
/ 09 марта 2011

update : только что посмотрел на время обновления кэша длинных запросов, и они не сталкивались со временем сбоя сервера.

update2 : обнаружена причина проблемы. Рекламный сервер не работает, и сервер зависает, хотя кажется, что мы правильно установили время ожидания сокета. Есть ли способ проверить поведение тайм-аута?

У нас очень занятый сервер. ~ 3K одновременных подключений Сервер имеет 32 ГБ оперативной памяти 2xCPU. У нас есть сервис недоступных ошибок. Сервер не отвечает с ошибкой 500, и журнал ошибок показывает сотни / тысячи строк:

[warn] mod_fcgid: can't apply process slot for /var/www/fcgi-bin.d/php5-default/php-fcgi-wrapper

Мы думаем, что это может быть ошибка конфигурации или ошибка соединения с базой данных / запроса. Процесс php обновляет кеш, который является очень и очень сложным результатом запроса. 3 отдельных запроса выполняются каждый два раза в день. Я включил медленный журнал запросов. Я подозреваю, что в нашем случае запрос превышает ограничение времени выполнения php 20 секунд (установлено в следующих файлах). Любая помощь приветствуется.

Мы используем модель apache worker mpm с mod_fcgid.

Вот файл fcgid.conf:

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
SocketPath /var/lib/apache2/fcgid/sock

# Communication timeout: Default value is 20 seconds
IPCCommTimeout 20

# Connection timeout: Default value is 3 seconds

IPCConnectTimeout 3

И файл /etc/apache2/conf.d/php-fcgid.conf:

<IfModule !mod_php4.c>

# Путь к php.ini <96> по умолчанию / etc / phpX / cgi DefaultInitEnv PHPRC = / etc / php5 / cgi

# Number of PHP childs that will be launched. Leave undefined to let PHP decide.
# DefaultInitEnv PHP_FCGI_CHILDREN 8

# Maximum requests before a process is stopped and a new one is launched
DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
# Maximum requests a process handles before it is terminated
MaxRequestsPerProcess 1500
# Maximum number of PHP processes.
MaxProcessCount       45

# Define a new handler "php-fcgi" for ".php" files, plus the action that must follow
AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php-fcgi-wrapper

# Define the MIME-Type for ".php" files
AddType application/x-httpd-php .php

# Define alias "/fcgi-bin/". The action above is using this value, which means that
# you could run another "php5-cgi" command by just changing this alias
Alias /fcgi-bin/ /var/www/fcgi-bin.d/php5-default/

# Turn on the fcgid-script handler for all files within the alias "/fcgi-bin/"
<Location /fcgi-bin/>
    SetHandler fcgid-script
    Options +ExecCGI
</Location>

Apache2 рабочий mpm config:

<IfModule mpm_worker_module>
StartServers         10
MaxClients           2048
ServerLimit          2048
MinSpareThreads      30
MaxSpareThreads      100
ThreadsPerChild      64
ThreadLimit          100
MaxRequestsPerChild   5000

Мы посмотрели инструкции на этой веб-странице и загрузили конфигурацию сервера: http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html

update : просто посмотрел на время обновления кэша длинных запросов, и они не сталкивались со временем сбоя сервера.

update2 : обнаружена причина проблемы. Рекламный сервер не работает, и сервер зависает, хотя кажется, что мы правильно установили время ожидания сокета. Есть ли способ проверить поведение тайм-аута?

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

Ваша проблема довольно хорошо освещена Google . Похоже, вам нужно немного поиграть с конфигурацией (с такими опциями, как MaxProcessCount).

Я бы посоветовал заменить apache на nginx. Я испытал лучшую производительность. Кроме того, nginx использует намного меньше памяти, чем apache. Я использую php-fpm для быстрого cgi.

1 голос
/ 12 февраля 2014

перезагрузите ваш сервер. Я решил эту проблему следующим образом ~

0 голосов
/ 09 марта 2011

Переместитесь -> к nginx как можно скорее.Попробуйте -> Кэширование с APC для одиночного сервера, memcached для распределенных систем или систем файлового кэша. Используйте -> индексы БД правильно.Это одна из самых важных вещей, которые я когда-либо испытывал.

...