Recentemente, descobri que a memória do meu blog estava sempre sendo “comida” de vez em quando. Depois de fazer login no backend, ocasionalmente havia atrasos. No início, suspeitei que fosse causado por troca insuficiente, então adicionei. alguns gigabytes de Swap para o host VPS e observei depois de um tempo, descobri que não importa o tamanho do Swap, ele foi lentamente "comido"!

É óbvio que alguns serviços PHP têm ocupado a memória do VPS e não a liberaram, fazendo com que o Swap seja chamado após o esgotamento da memória física. Obviamente, o Swap não funciona tão eficientemente quanto a memória física, então o processo se torna. preso. Considerando que o site WordPress utiliza atualmente muitos temas e plug-ins, é normal que esta situação ocorra.

Na arquitetura LNMP, o PHP roda em modo FastCGI Segundo o comunicado oficial, o php-cgi reciclará toda a memória utilizada pelo script ao final de cada solicitação, mas não a liberará para o sistema operacional, mas continuará. para segurá-lo. Responda à próxima solicitação PHP. E php-fpm é o gerenciador de processos FastCGI, usado para controlar a memória e os processos do php.

O processo de experiência de otimização php-fpm do Linux ocupa muita memória e não libera memória

Portanto, a solução é otimizar o número total de processos e a memória ocupada por um único processo através do php-fpm, resolvendo assim o problema do processo php-fpm ocupar grande memória e não liberar memória. Mais métodos de otimização de servidor Linux e experiência de construção de sites, bem como:

  1. Linux Crontab comando tarefa agendada sintaxe básica e tutorial de operação-VPS/Server Automation
  2. Alibaba Cloud Japan VPS Host Speed ​​Performance Evaluation-Japan SoftBank Hong Kong NTT Line
  3. A resolução de nome de domínio DNS permite que o DNSSEC evite o sequestro de DNS - configurações de DNS do Google Cloud DNSSEC

PS: Atualizado em 14 de dezembro de 2018, Se a memória e o desempenho do seu host VPS não forem muito bons, é melhor ativar o cache neste momento para economizar bastante o consumo de recursos: WordPress permite a aceleração de cache Nginx fastcgi_cache método -Exemplo de configuração do Nginx.

PS: Atualizado em 29 de setembro de 2019, Devido ao artefato de otimização de servidor ngx_pagespeed desenvolvido pelo Google, ele integra um conjunto completo de ferramentas de otimização, como carregamento atrasado de imagem, webp adaptativo, otimização JS e CSS e imagem otimização: o artefato de otimização do servidor PageSpeed-Nginx implanta o módulo ngx_pagespeed e experimenta efeitos acelerados.

1. Analise e determine o uso de memória do php-fpm

Se você descobrir que o host VPS está travado, primeiro verifique o uso de memória. Os comandos comumente usados ​​são Top, Glances, Free, etc. Amigos que não conhecem esses comandos podem primeiro verificar o tópico para saber se a estação de mineração faz isso: Sistema Linux Resumo dos comandos de monitoramento - CPU mestre, memória, E/S de disco, etc. para encontrar gargalos de desempenho.

Use o comando Glances e pressione m para visualizar o uso de memória do processo host VPS atual Classifique-os da memória mais ocupada para a menos ocupada (ou use o comando Top e pressione M, o efeito é o mesmo). Conforme imagem abaixo (clique para ampliar):

3.2  Reduza o número de processos php-fpm

Se a memória do seu host VPS estiver ocupada e esgotada, você pode verificar o número de seus processos php-fpm Calcular de acordo com o número de processos php-fpm = memória/2/30 O número de processos php-fpm adequados. 1GB de memória é 10- Entre 20 e 20, depende dos add-ons carregados pelo seu PHP.

3.3  exemplo de configuração php-fpm

Aqui, uma configuração VPS de php-fpm com 1GB de memória é usada como demonstração. Na operação real, o valor da configuração deve ser considerado com base no desempenho do próprio servidor, PHP, etc.

pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。

4. Resolva o problema de que o processo php-fpm não libera memória

O problema acima de reduzir o uso de memória do php-fpm é alcançado reduzindo o número total de processos php-fpm. Durante o uso real, verifica-se que o processo php-fpm ainda tem o problema de ocupar memória por muito tempo sem. liberando-o. A solução é reduzir o número de pm.max_requests.

O número máximo de solicitações, max_requests, significa que quando o número de solicitações processadas por um processo PHP-CGI atingir max_requests, o processo será reiniciado automaticamente, atingindo assim o objetivo de liberar memória. Tomemos como exemplo as configurações do host VPS com 1 GB de memória (se o valor definido não atingir o nível de liberação de memória, você pode continuar diminuindo-o):

pm.max_requests = 500 

Quando o processo php-fpm atingir o valor definido por pm.max_requests, o processo será reiniciado para liberar memória. A imagem abaixo é o resultado do meu teste. Pode-se observar que o processo php-fpm foi encerrado à força e a memória foi liberada.

5. Resumo

Para grandes requisitos de memória e simultaneidade e disponibilidade, é recomendado usar o modo de gerenciamento estático + o maior pm.max_children. Caso seja um servidor com pouca memória, recomenda-se utilizar o modo dinâmico ou ondemand e reduzir o número de processos pm.start_servers e pm.max_spare_servers.

Por que não ajustei os parâmetros para obter o efeito desejado? De acordo com a experiência do wzfou.com, os parâmetros do arquivo de configuração php-fpm não podem ser generalizados. Eles devem ser ajustados com base no próprio desempenho do servidor, conteúdo dinâmico da WEB e requisitos de disponibilidade. é melhor verificar se há vazamento de memória.

Atualizado em 9 de outubro de 2019, Se seus parâmetros php-fpm forem ajustados muito pequenos, um erro 502 pode ocorrer Solução: Resolva o erro 502 no menu de salvamento de edição em segundo plano do WordPress.

Deixe uma resposta