
Estou tentando descobrir por que meus processos Apache estão consumindo tanta memória
Minhas especificações de fatia (1,5 GB de RAM, CentOS 5, Apache2, PHP 5.2, MySQL)
Como você pode ver, meus principais processos estão consumindo quase metade de toda a minha memória e, quando mais processos são gerados, o servidor quase para, frequentemente entrando em troca e travando.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
Alguém tem alguma idéia do que poderia estar fazendo com que o Apache (e o PHP) consumissem tanta memória?
total used free shared buffers cached
Mem: 1545 827 718 0 3 111
-/+ buffers/cache: 713 832
Swap: 3071 103 2968
Responder1
É quase certo que você está executando o mod_php, o que significa que é quase certo que você está executando o Apache no mpm_prefork.
Se o desempenho geralmente estiver bom até que a carga faça com que você comece a trocar, uma solução rápida é começar a reduzir os MaxClients do Apache. Se o Apache tiver permissão para bifurcar os processos de trabalho sempre que quiser, ele começará a trocar sob carga. As solicitações ficarão na fila até que um trabalhador esteja disponível, então as coisas podem ficar lentas, mas não tão lentas quanto a morte por troca.
Se você realmente precisa ajustar as coisas com mais precisão, considere fugir do prefork apache mpm. Isso significa executar PHP como FastCGI. Se você optar pelo PHP no FastCGI, considere atualizar para o PHP 5.3.3, que possui um gerenciador de processos FastCGI muito mais agradável (opção de configuração --enable-fpm).
php-fpm/worker é muito mais eficiente em termos de memória do que o antigo mod_php. Você pode então ajustar o número de processos/threads do Apache independentemente do número de processos PHP. E seus processos PHP com uso intenso de memória são usados apenas para fornecer conteúdo baseado em php, e não são desperdiçados no fornecimento de arquivos estáticos.
Responder2
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
O wordpress é a única coisa rodando no apache? Estou curioso principalmente sobre o uso muito alto da CPU do PID 6765. Me pergunto o que isso está fazendo. No que diz respeito aos mem%s, isso parece bastante normal para uma configuração de webapp, já que cada thread está, na verdade, executando mais de um trabalhador.
Qual MPM você está usando para o Apache e como você o configurou?
Além disso, se você estiver postando dumps de terminal, comece cada linha com quatro espaços. Permite que a formatação seja preservada.
Responder3
Minha bola de cristal está um pouco empoeirada, mas acho que você está usandomemcachede sua extensão PHP. Se for esse o caso, tente desativá-lo, a menos que você realmente precise dele.
Outra possibilidade é que você tenha algum tipo de cache de código operacional, comoXCache, instalado e configurado para usar muita memória.
Você pode tentar
pmap -x `pidof apache`
para ver o que está consumindo a memória.
Responder4
Não carregue módulos Apache não utilizados (como python, perl, etc).
Use o módulo php eAccelerator. É um compilador php. Você pode obter uma execução mais rápida e menor uso de memória.
Outros usuários talvez também estejam certos.