[РЕДАКТИРОВАТЬ]
В основном плохой вопрос - см. Мой ответ
[/РЕДАКТИРОВАТЬ]
У нас есть система под управлением RHEL6, x64. Мы используем локальную установку apache 2.2.22 из исходников. мы обслуживаем в первую очередь:
Вот некоторый контекст; главный вопрос ниже.
Все это говорит с серверной частью Oracle.
У нас возникают проблемы с тем, что Oracle перестает отвечать на запросы. Мы думаем, что это связано с тем, что мы достигли максимального предела процесса в Oracle. Мы увеличили лимит процесса, но теперь мы испытываем нехватку памяти на сервере Oracle. У нас куча сеансов оракула простаивает. Я могу отследить кучу из них до процессов httpd.
Apache :: DBI из mod_perl запускает новое соединение с базой данных с каждым порожденным дочерним элементом httpd. Мы обеспокоены тем, что они не всегда закрываются должным образом при выходе httpd ... и выходе httpd очень часто. Я знаю, что было бы хорошо изменить приложения mod_perl, чтобы использовать лучшую форму пула соединений с базами данных; мы планируем заняться этим, но хотели бы решить нашу непосредственную проблему раньше.
Итак, вот главный вопрос.
Мы используем префорк MPM.
Дочерние процессы apache длятся не более нескольких минут.. Анализ журнала показывает, что каждый из них обслуживает менее 50 клиентов перед выходом; последний запрос, который обслуживает каждый ребенок, это OPTIONS * HTTP/1.0
по какой-то внутренней связи; У меня такое впечатление, что это "пинг" от главного процесса.
Я настроил конфигурацию MPM следующим образом. Я не хотел поднимать MinSpareServers слишком высоко, потому что, в конце концов, я пытаюсь минимизировать количество сеансов для Oracle.
MinSpareServers 5
MaxSpareServers 30
MaxClients 150
MaxRequestsPerChild 10000
Сейчас мы обслуживаем 250-300 запросов в минуту.
У нас запущен 21 httpd, старшему из которых (кроме главного, принадлежащего root) 3 минуты.
Такая скорость сбора детей апачей действительно кажется чрезмерной. Что могло быть причиной этого?
Apache был построен с помощью:
$ ./configure --prefix=/opt/apache --with-ssl=/usr/lib --enable-expires --enable-ext-filter --enable-info --enable-mime-magic --enable-rewrite --enable-so --enable-speling --enable-ssl --enable-usertrack --enable-proxy --enable-headers --enable-log-forensic
Информация о конфигурации Apache:
% /opt/apache/bin/httpd -V
Server version: Apache/2.2.22 (Unix)
Server built: Jul 23 2012 22:30:13
Server's Module Magic Number: 20051115:30
Server loaded: APR 1.4.5, APR-Util 1.4.1
Compiled using: APR 1.4.5, APR-Util 1.4.1
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/opt/apache"
-D SUEXEC_BIN="/opt/apache/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
модули компилируются в apache, а не в общие библиотеки:
% /opt/apache/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_ext_filter.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_log_forensic.c
mod_env.c
mod_mime_magic.c
mod_expires.c
mod_headers.c
mod_usertrack.c
mod_setenvif.c
mod_version.c
mod_proxy.c
mod_proxy_connect.c
mod_proxy_ftp.c
mod_proxy_http.c
mod_proxy_scgi.c
mod_proxy_ajp.c
mod_proxy_balancer.c
mod_ssl.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_info.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_speling.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c
И последнее замечание: все пакеты red hat httpd, apr и perl установлены, но ldd показывает, что ни одна из этих библиотек не связана с запущенным httpd.
ааарх
ответ в этом случае оказывается, что я не имел настроил apache с этими параметрами maxrequestsperchild, minspareservers и maxspareservers.
Я изменил конфигурационный файл, который, как мне казалось, был Include
d в основном файле, но не было. Новичок на этом сайте и старый старый конфиг. вздох.
Итак, поведение, которое я описываю, является компилированным по умолчанию (я проверил трижды; больше нигде не устанавливается). В документации предполагается, что это стандартные значения по умолчанию:
http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild
http://httpd.apache.org/docs/2.2/mod/prefork.html
MaxRequestsPerChild 10000
MaxSpareServers 10
MinSpareServers 5
Я думаю, что поведение, которое я видел, не соответствовало этим настройкам по умолчанию. Я запишу ошибку с apache.
Думаю, это все еще полезный вопрос, чтобы оставить на сайте, потому что поведение по умолчанию не соответствует документации. Если другие не согласятся, я с радостью закрою свой вопрос.