Otimização Debian x86_64 + Nginx + PHP5-FPM


1

Eu costumava ter um VPS (512MB) da Linode e estava executando nginx + php5-fpm(que vem com o php5.3.3) no Debian Lenny ( i686 ). O uso total de memória foi de cerca de 90 a 100 MB .

Agora eu tenho outro VPS (empresa de hospedagem diferente) e também corro o nginx + php5-fpmDebian Lenny ( x86_64 ). O sistema é de 64 bits, então o uso de memória é maior agora, cerca de 210-230 MB , o que eu acho demais.

Aqui está o meu php5-fpm.conf:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 300

Isso é o que o topcomando me diz:

top - 15:36:58 up 3 days, 16:05,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 209 total,   1 running, 208 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    532288k total,   469628k used,    62660k free,    28760k buffers
Swap:  1048568k total,      408k used,  1048160k free,   210060k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
22806 www-data  20   0  178m  67m  31m S    1 13.1   0:05.02 php5-fpm
 8980 mysql     20   0  241m  55m 7384 S    0 10.6   2:42.42 mysqld
22807 www-data  20   0  162m  43m  22m S    0  8.3   0:04.84 php5-fpm
22808 www-data  20   0  160m  41m  23m S    0  8.0   0:04.68 php5-fpm
25102 www-data  20   0  151m  30m  21m S    0  5.9   0:00.80 php5-fpm
10849 root      20   0 44100 8352 1808 S    0  1.6   0:03.16 munin-node
22805 root      20   0  145m 4712 1472 S    0  0.9   0:00.16 php5-fpm
21859 root      20   0 66168 3248 2540 S    1  0.6   0:00.02 sshd
21863 root      20   0 66028 3188 2548 S    0  0.6   0:00.06 sshd
 3956 www-data  20   0 31756 3052  928 S    0  0.6   0:06.42 nginx
 3954 www-data  20   0 31712 3036  928 S    0  0.6   0:06.74 nginx
 3951 www-data  20   0 31712 3008  928 S    0  0.6   0:06.42 nginx
 3957 www-data  20   0 31688 2992  928 S    0  0.6   0:06.56 nginx
 3950 www-data  20   0 31676 2980  928 S    0  0.6   0:06.72 nginx
 3955 www-data  20   0 31552 2896  928 S    0  0.5   0:06.56 nginx
 3953 www-data  20   0 31552 2888  928 S    0  0.5   0:06.42 nginx
 3952 www-data  20   0 31544 2880  928 S    0  0.5   0:06.60 nginx

Então, a questão existe alguma maneira de usar menos memória? Btw, eu tenho 16 núcleos e seria bom usá-los ...

Respostas:


1
  • PHP, NGINX

Com a pouca RAM que você tem, o seu VPS estará trocando muito antes de usar todos os núcleos - esqueça: execute um processo de trabalho nginx - com ele será capaz de lidar com MUITAS solicitações do que você precisa.

Como você provavelmente está executando o PHP a partir da distro Lenny, você tem um monte de coisas compiladas nele. A recompilação do PHP economizará um pouco de RAM. Portanto, não carregará as extensões que você não precisa - verifique no php.ini o que está sendo carregado.

O PHP-FPM envia solicitações da fila para os trabalhadores (round robin), para que você possa reduzir o número de processos filhos para 3-4, se for necessário - se houver mais solicitações, eles aguardarão a sua vez.

  • Resto dos vps

Verifique quais serviços você está executando e se realmente precisa deles. A instalação padrão inclui muitas coisas

Se você tem o saslauthd em execução e deseja que ele esteja em execução, adicione um trabalho cron que o reinicie diariamente - ele tem um vazamento de memória desagradável há muito tempo e eu já vi ele crescer para 1,5 GB em cerca de dois semanas em uma das minhas caixas.


0

Não tenho 100% de certeza sobre como reduzir o uso de memória para php5-fpm, no entanto, se você quiser usar todos os 16 núcleos com nginx, altere o worker_processes para 16 no nginx.conf


0

Você pode diminuir a quantidade de servidores php-fpm ou reduzir a quantidade de memória que o php pode usar.

"x" é a quantidade de memória que você pode permitir que o php / fpm use e, em seguida, divida x pela quantidade de memória que cada script php pode precisar usar (memory_limit) e você tem um número de "servidores" php-fpm (não incluindo qualquer cache de código de operação ou sobrecarga por php-fpm).

Por exemplo: Se você pode permitir que ele use no máximo 256M e cada script seja limitado a 64M, então '256/64 = 4' servidores php-fpm.

Meu palpite é que gastar alguns dólares extras em mais memória vale cada centavo, no entanto.

Referências: http://www.php.net/manual/en/ini.core.php#ini.memory-limit


-1

É normal que o sistema de 64 bits use mais memória que o de 32 bits, pois praticamente todo número ou ponteiro no código precisaria duas vezes mais. Você realmente precisa de 64 bits?

Os programas estritamente vinculados à CPU de 64 bits podem ser mais rápidos que os de 32 bits no mesmo computador, mas na sua situação (muito pouca RAM), menos programas de RAM usam melhor, pois mais deles podem ser usados ​​para cache.

Eu recomendo voltar para 32 bits.


@sonassi: Por que você acha que muitos sistemas operacionais / programas têm requisitos de memória mais altos para a versão de 64 bits do que 32 bits? Eu sei que a instalação do sistema de 32 bits no computador com mais de 3 GB de RAM não faz sentido. Mas com 0,5 GB de RAM, a diferença seria muito significativa. Apenas tente isso - faça o download de algum tipo de Linux LiveCD nas versões de 32 bits e 64 bits e compare seu uso de memória. 64 bits não é incondicionalmente melhor.
Tometzky

Não vou entrar em discussão, mas as respostas aqui são bastante detalhadas sobre 32 bits vs 64 bits - superuser.com/questions/56540/32-bit-vs-64-bit-systems . Simplificando, o potencial para aumentar o uso da memória não é motivo suficiente para regressar a 32 bits. Mas sim, você está correto que pode incorrer em um aumento no uso de memória - mas os benefícios normalmente superam que (registros mais rápidos, as operações dentro de memória etc.)
Ben Lessani - Sonassi

@sonassi: Existe até uma nova interface binária de aplicativo no kernel Linux mais recente (3.4) - x32 ABI - criada por causa disso. Ele permite a execução de programas no modo de 64 bits (para mais registros, etc.), mas com ponteiros de 32 bits (para menos uso de RAM).
Tometzky

Entendido. Fiquei talvez um pouco apressado em responder à sua resposta. Se você editar sua resposta acima, posso remover o voto inativo.
Ben Lessani - Sonassi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.