ajuste de desempenho vs entendimento de vazamento de memória?

2

Eu li praticamente todas as postagens de blogs e respostas de falha de servidor relacionadas a isso, mas não vi absolutamente nenhuma melhoria na CPU ou no uso da memória do servidor, então sinto que estou perdendo alguma coisa.

No começo eu pensei que isso fosse uma questão WP. Eu repliquei o servidor remoto usando o Vagrant na minha máquina e o site WHIPS. É muito rápido. Não sei se isso acontece porque a VM está usando meu processador, mas a VM do Vagrant tem memória menor que a do VPS remoto.

Além disso, eles estão usando a mesma versão do Ubuntu, os mesmos módulos do Apache, as mesmas configurações de servidor vistas abaixo. Eu configurei o servidor remoto há mais de um ano, então talvez haja algo que obviamente não estou verificando? Eu corri através do apt-get dist-upgrade, assim como o apt-get autoremove tanto no Linode quanto no Vagrant VM.

Linode VPS:
Ubuntu 10,04
CPU Intel (R) Xeon (R) E5-2670 0 @ 2,60 GHz 8 núcleos
1,47 GB de mem real, 256 MB de swap mem

Felizmente, o servidor (normalmente) não bloqueia, mas é incrivelmente lento durante o tempo até o primeiro byte. Aqui está o que top parece

top - 06:41:36 up 2 days, 14:02,  1 user,  load average: 6.12, 6.16, 5.75
Tasks: 128 total,   6 running, 122 sleeping,   0 stopped,   0 zombie
Cpu(s): 17.3%us,  5.2%sy,  0.0%ni, 30.7%id,  7.5%wa,  0.0%hi,  0.1%si, 39.3%st
Mem:   1546512k total,  1157032k used,   389480k free,    27964k buffers
Swap:   262140k total,    72840k used,   189300k free,   779308k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                         
 9276 www-data  20   0  650m 108m  84m R  101  7.2   6:48.42 apache2                                                                          
 9203 www-data  20   0  646m 122m 102m R   64  8.1   7:10.95 apache2                                                                          
 9208 www-data  20   0  653m 136m 109m R   56  9.0   7:50.82 apache2                                                                          
 9207 www-data  20   0  666m 148m 110m S   51  9.8   7:45.71 apache2                                                                          
 9201 www-data  20   0  656m 124m  95m R   49  8.3   9:09.42 apache2                                                                          
 9204 www-data  20   0  645m 107m  88m D   47  7.1  10:12.04 apache2                                                                          
 9202 www-data  20   0  656m 131m 101m S   45  8.7   9:36.33 apache2                                                                          
 2337 mysql     20   0  165m  41m 3028 S   29  2.8   1064:57 mysqld                                                                           
    7 root      20   0     0    0    0 R    6  0.0  78:57.47 rcu_sched                                                                        
 2734 root      20   0 33304 4452 1904 S    2  0.3  14:52.61 newrelic-daemon                                                                  
 9498 deploy    20   0  2632 1224  932 R    1  0.1   0:00.06 top                                                                              

link

KeepAlive Off
HostnameLookups Off
Timeout 30

<IfModule mpm_prefork_module>
   StartServers         3
   ServerLimit          12
   MinSpareServers      2
   MaxSpareServers      3
   MaxRequestsPerChild  300
   MaxClients           12
</IfModule>

O aumento de MaxRequestsPerChild resulta na troca quase instantânea.

php.ini

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 32M

my.cnf

key_buffer              = 24M
max_allowed_packet      = 1M
thread_stack            = 64K
thread_cache_size       = 8
table_cache             = 4
sort_buffer             = 4M
net_buffer_length       = 2K
por zack 31.03.2014 / 13:40

2 respostas

2

A primeira coisa que notei é 39.3%st - isso é roubo de CPU , o que significa que o hipervisor está dando Tempo de CPU para outra VM na mesma máquina física. Eu movi essa VM para outra máquina host. Você terá que falar com o provedor sobre como fazer isso.

Em relação à RAM, você deve usar um cache opcode como APC . Você também deve mudar de mod_php para FPM . Um valor de 12 para MaxClients parece extremamente baixo, e o fato de aumentar MaxRequestsPerChild (# de solicitações que um processo manipulará antes de ser reciclado) faz com que o sistema troque de fato pode ser um sinal de vazamento de memória - você d tem que inspecionar / perfilar o código para resolvê-lo.

Em geral, 1,47 GB é uma pequena quantidade de RAM para rodar um aplicativo PHP ocupado com um servidor MySQL local. Você pode simplesmente precisar de uma caixa maior.

    
por 31.03.2014 / 13:59
2

Geralmente, perguntas como essa devem ser encerradas como caminho muito amplo.

No entanto, isso é muito interessante:

Increasing MaxRequestsPerChild results in swapping almost instantly

... que aponta para um vazamento de memória.

A arquitetura do PHP torna os vazamentos de memória relativamente incomuns - mas eles podem ocorrer no shm. Mas se o vazamento estivesse ocorrendo no PHP, eu não esperaria que ele fosse afetado pelo MaxRequestsPerChild dessa maneira.

Eu começaria verificando as versões exatas do Apache e do módulo que ele instalou - ele tem um registro de caminho mais irregular do que o PHP nesse aspecto ( por exemplo ). Certifique-se de que sua distro esteja atualizada com todos os patches.

    
por 31.03.2014 / 14:47