Apache MPM Worker + mod-fcgid + PHP-CGI

DavyJohnes
На сайте с 05.01.2011
Offline
84
2618

Предыстория:

Ось: Ubuntu 11.10

Apache 2 (mpm-prefork)

apache modules:

- rewrite

- qos

- php

На всем этом стоит сайт основная цель которого - с помощью php скрипта передавать файлы с удаленного сервера юзеру. (Выдает header('Content-disposition:attachment'), с помощью курла читается удаленный файл, записывается в переменную и далее echo результат curl запроса).

Со временем перестало хватать ресурсов сервера, в частности ОЗУ (4 ГБ). Задумался о том что бы сменить apache с prefork на worker. Как следствие пришлось менять режим php, т.к. он не поддерживает апач в режиме нитей(или апач не поддерживает php - неважно).

История:

Приступил к установке apache2-mpm-worker

Шаг 1.

apt-get install apache2-mpm-worker

В ходе инсталяции увидел инфу о том что будет удален apache2-mpm-prefork и mod-php, и вместо этого будет установлен php-cgi.

Шаг 2.

Иду в /etc/apache2/apache2.conf с целью увеличить кол-во макс. коннектов, нитей и процессов.

Вопрос №1 Правильно ли я понял назначение директив mpm-worker?
StartServers - задает кол-во процессов "родителей" которые будут порождать дочерние потоки для обработки запросов.

ThreadLimit - Общее число потоков для всех "родительских" процессов

ThreadsPerChild - Число потоков которое может создать каждый из "родительских" процессов (Т.о. ThreadsPerChild=ThreadLimit/StartServers верно ?).

MinSpareThreads\MaxSpareThreads - диапазон кол-ва потоков которое каждый "родитель" держит запущенным в ожидании поступления запроса (Т.о. MaxSpareThreads не может превышать ThreadsPerChild, верно ?).

Вопрос №2 Что лучше: много "родительских" процессов и несколько потов на каждый или несколько "родительских" и много потоков для каждого ? Если однозначного ответа нет, то в какой ситуации одно лучше другого ?

Шаг 3.

В результате гугления решил что самым оптимальным способом прикрепления php Будет mod_fcgid

apt-get install libapache2-mod-fcgid

Далее в настройка виртуального хоста дописываю:


AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php

И для директории в который находятся php скрипты пишу +ExecCGI.

Итог.

Память потребляемая апачем уменьшилась в разы, вместе с тем появилось много процессов php, несмотря на это общее быстродействие увеличилось, потребляемая память уменьшилась.

Однако в логах апача появились некоторые непонятные ошибки

Вопрос №3
Что означает обилие следующих ошибок в логах апача ?


[Wed Feb 01 17:25:14 2012] [warn] [client XXX.XXX.XXX.XXX] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://site.ru/path/to/script.php
[Wed Feb 01 17:25:14 2012] [warn] [client XXX.XXX.XXX.XXX] (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function, referer: http://site.ru/path/to/script.php


Однако ненормальной работы какой-либо из функции сайта не наблюдается.

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
M
На сайте с 16.09.2009
Offline
278
#1
DavyJohnes:

Вопрос №1 Правильно ли я понял назначение директив mpm-worker?

Нет. Для этого документацию надо было прочитать.

DavyJohnes:

ThreadLimit - Общее число потоков для всех "родительских" процессов

Чушь.

DavyJohnes:
ThreadsPerChild - Число потоков которое может создать каждый из "родительских" процессов (Т.о. ThreadsPerChild=ThreadLimit/StartServers верно ?).

Нет.

DavyJohnes:
MinSpareThreads\MaxSpareThreads - диапазон кол-ва потоков которое каждый "родитель" держит запущенным в ожидании поступления запроса (Т.о. MaxSpareThreads не может превышать ThreadsPerChild, верно ?).

Нет. Неверно.

DavyJohnes:
Вопрос №2 Что лучше: много "родительских" процессов и несколько потов на каждый или несколько "родительских" и много потоков для каждого ? Если однозначного ответа нет, то в какой ситуации одно лучше другого ?

Лучше для начала разобраться как работает MPM модуль. А потом его настраивать.

В данном вопросе разницы особой нет. Разве что потоки в разных процессах получаются изолированными друг от друга. Случится сегфолт - умрут все потоки только в данном процессе.

DavyJohnes:

Вопрос №3
Что означает обилие следующих ошибок в логах апача ?

[Wed Feb 01 17:25:14 2012] [warn] [client XXX.XXX.XXX.XXX] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://site.ru/path/to/script.php
[Wed Feb 01 17:25:14 2012] [warn] [client XXX.XXX.XXX.XXX] (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function, referer: http://site.ru/path/to/script.php

См. FcgidIOTimeout (или IPCCommTimeout) директиву.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
DavyJohnes
На сайте с 05.01.2011
Offline
84
#2
myhand:
Нет. Для этого документацию надо было прочитать.

Вы думаете вокруг вас одни дураки?:) Естественно я читал доку на apache.org. Возникли вопросы, недопонимание, именно по этой причине я и задал эти вопросы тут.

M
На сайте с 16.09.2009
Offline
278
#3
DavyJohnes:
Вы думаете вокруг вас одни дураки?:)

Вас не должно беспокоить то что я, возможно, думаю.

DavyJohnes:
Естественно я читал доку на apache.org.

Я вижу обратное, о чем и написал. Либо вы не читали, либо ни слова не поняли. Google Translate вам в помощь.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий