[EDITAR]
Má pergunta, principalmente - veja minha resposta
[/ EDIT]
Temos um sistema rodando RHEL6, x64. Estamos usando uma instalação local do apache 2.2.22 da fonte. nós servimos principalmente:
- aplicativos mod_perl (com uma instalação local do perl 5.16.0)
- aplicativos do tomcat proxied com mod_jk
Aqui está algum contexto; a questão principal está abaixo.
Tudo isso fala com um back-end da Oracle.
Estamos tendo problemas com o Oracle deixar de responder. Achamos que isso acontece porque estamos atingindo o limite máximo de processo no oracle. Aumentamos o limite do processo, mas agora estamos atingindo a pressão da memória no servidor oracle. Nós temos toneladas de sessões oracle ociosas. Eu posso rastrear um monte deles de volta aos processos do httpd.
O Apache :: DBI do mod_perl inicia uma nova conexão com o banco de dados com cada filho httpd gerado. Estamos preocupados que nem sempre eles sejam fechados corretamente quando a saída do httpd ... e os httpd estão saindo muito com freqüência. Eu sei que seria bom modificar os aplicativos mod_perl para usar alguma forma melhor de pooling de conexões do banco de dados; planejamos seguir isso, mas gostaríamos de resolver nosso problema imediato mais cedo.
Então, aqui está a questão principal.
Estamos usando o MPM prefork.
Os processos filhos do apache duram no máximo alguns minutos . Análise de log mostra que cada um está servindo menos de 50 clientes antes de sair; a última solicitação que cada filho atende é OPTIONS * HTTP/1.0
em algum tipo de conexão interna; Tenho a impressão de que isso é um "ping" do processo mestre.
Eu ajustei a configuração do MPM da seguinte forma. Eu não queria elevar o MinSpareServers muito alto, porque, afinal, estou tentando minimizar o número de sessões para o oracle.
MinSpareServers 5
MaxSpareServers 30
MaxClients 150
MaxRequestsPerChild 10000
Neste momento, estamos atendendo a 250 a 300 solicitações por minuto.
Temos 21 httpd em execução, o mais velho (exceto o master, de propriedade de root) com 3 minutos de duração.
Esta taxa de colheita das crianças apache realmente parece excessiva. O que poderia estar causando isso?
O Apache foi construído com:
$ ./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
Informações de configuração do 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"
módulos são compilados no apache em vez de bibliotecas compartilhadas:
% /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
Uma observação final - todos os pacotes httpd, apr e perl da red hat estão todos instalados, mas o ldd mostra que nenhuma dessas bibliotecas está vinculada ao httpd em execução.