Por que o Apache gera muitos processos?

1

Eu tenho um blog Wordpress com uma postagem. Eu queria me hospedar pela experiência e "diversão" disso. Eu raramente recebo qualquer espectador porque eu estou apenas configurando. Eu estou em uma instância do Amazon EC2-micro Arch-Linux usando o Apache 2.4.23 e o MySQL 5.5.52 para executar o Wordpress. Eu tenho 1 GB de RAM.

Eu não acho que isso seria um aplicativo pesado, mas toda vez que eu tento rodar o Wordpress, depois de alguns dias o servidor sempre falha. Isso ocorre porque o Apache gerou centenas de processos e não os matou. Eles não deveriam desaparecer depois de um tempo?

Eupasseiumbomtempopesquisandooproblemaagora.Euconfigurei2GBdeswaptentandoconsertá-lo.Osprocessostambémestãosobrecarregados.EuadicioneimaxClients40aomeuhttpd.confeissopareceufuncionarporumtempo,masapóscercade2semanasoApachecaiunovamente.Eutenteioutrasconfiguraçõesemhttpd.conf,maselascausariamfalhanoApacheaindamaisrápido.Eutenhoumblocoqueatualmenteseparececomisso(depoisdeváriastentativas):

#StartServers3#MinSpareServers2#MaxSpareServers5#ServerLimit10maxClients40#MaxRequestsPerChild100#KeepAliveTimeout2

Alguémquetenhaexperiênciacomesseproblemaespecíficopodemedaralgumconselho?EusóestoutentandohospedarumblogWordPresssimples.Seissoajudar,aquiestámeuhttpd-V

[ec2-user~]$httpd-VServerversion:Apache/2.4.23(Amazon)Serverbuilt:Jul29201621:42:17Server'sModuleMagicNumber:20120211:61Serverloaded:APR1.5.1,APR-UTIL1.4.1Compiledusing:APR1.5.1,APR-UTIL1.4.1Architecture:64-bitServerMPM:preforkthreaded:noforked:yes(variableprocesscount)Servercompiledwith....-DAPR_HAS_SENDFILE-DAPR_HAS_MMAP-DAPR_HAVE_IPV6(IPv4-mappedaddressesenabled)-DAPR_USE_SYSVSEM_SERIALIZE-DAPR_USE_PTHREAD_SERIALIZE-DSINGLE_LISTEN_UNSERIALIZED_ACCEPT-DAPR_HAS_OTHER_CHILD-DAP_HAVE_RELIABLE_PIPED_LOGS-DDYNAMIC_MODULE_LIMIT=256-DHTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Edit: Além disso, o fato de esses processos estarem em modo ininterrupto de suspensão (E / S, Status = D) é problemático!

    
por Mike Flynn 29.12.2016 / 02:58

2 respostas

5

Shamely, a maioria das soluções de hospedagem que as pessoas usam, decidem analisar o conteúdo do PHP através do Apache com o mod_php.

Por padrão, sua instalação do PHP não será seguramente thread-safe, o que efetivamente força o Apache a usar um mpm sem threads (módulo multiprocesso).

Sua instalação do Apache usa o prefork (como você pode ver na saída apachectl -V). Este mpm gera um processo por solicitação. Então, se você está com um pouco de carga e hoje em dia saber quantas solicitações simultâneas alguns navegadores enviam, essa lista de processos é bastante comum.

Tudo isso faz com que o apache rastreie e sofra com a carga que seus scripts php causam, fazendo com que o Apache pareça não ter um bom desempenho, quando tudo se deve a scripts php de análise e não-execução de php.

Agora, o que você deve fazer para evitar isso?

Socorro Apache da carga de mod_php, mova sua análise php para php-fpm, que lhe permitirá usar o "evento" mpm do Apache HTTPD, que permitiria até mesmo ter um processo com mil threads, se você quiser, e não apenas isso, é muito mais responsivo para carregar picos e será tão legal e rápido quanto qualquer outro servidor http por aí. E o mais importante, os processos do Apache não ficarão presos nas centenas.

Você pode encontrar algumas dicas sobre como configurar o Apache para isso em: Entrada Wiki do Wiki Oficial do Apache e mod_proxy_fcgi

    
por 29.12.2016 / 11:01
1

É claro que até 40 são muitos processos do Apache. Você tem apenas 1GB de RAM e 2GB de swap, e você está usando toda a RAM e mais da metade do swap. A razão pela qual seus processos estão no status D é porque sua máquina virtual está entrando e saindo do swap. É improvável que se recupere por conta própria; você também pode reiniciá-lo.

Diminua o número de MaxClients significativamente. Para um site de baixo tráfego em uma micro instância, não consigo imaginar que você precise que ele seja maior que 10 (nem que a instância consiga lidar com muito mais). De fato, as configurações que você comentou parecem ser um bom ponto de partida, e você provavelmente deve restaurá-las.

Depois de se recuperar, você pode começar a ver o que mais no sistema pode estar consumindo muita memória RAM.

    
por 29.12.2016 / 05:17

Tags