AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Como faço para ajustar a alocação de memória do servidor da Web Apache para evitar erros de falta de memória na minha instância EC2 Linux?
Meu servidor da Web Apache que executa em uma instância Linux do Amazon Elastic Compute Cloud (Amazon EC2) não responde de forma intermitente. Eu recebo as mensagens “out of memory”, “oom”, “oom-killer,” “failure to fork process” ou outras mensagens de memória insuficiente no log do sistema da instância.
Breve descrição
Por padrão, o Apache aceita 256 conexões ao mesmo tempo. Use o ServerLimit de configuração do Apache para configurar a cota.
Tipos de instâncias pequenas, como t2.small, têm apenas 2 gigabytes (GB) de memória e não conseguem gerenciar 256 conexões Apache simultâneas. Como resultado, você pode receber um dos seguintes erros quando o servidor recebe tráfego intenso:
- “Out of memory”
- “Oom”
- “Oom-killer”
- “Failure to fork process”
- Uma observação sobre memória insuficiente nos logs do sistema
Para analisar os logs do sistema da instância, verifique os seguintes arquivos de log com base na distribuição do seu sistema operacional (SO):
- Para Debian e Ubuntu, verifique /var/log/syslog.
- Para Amazon Linux, CentOS e Red Hat Enterprise Linux (RHEL), verifique /var/log/messages.
Resolução
Para evitar erros de memória na sua instância, defina uma cota no número de conexões Apache e httpd simultâneas que o servidor aceita. Use o parâmetro MaxRequestWorkers (Apache 2.4) na configuração do Apache para definir a cota. Para servidores Prefork sem thread, MaxRequestWorkers representa o número máximo de processos secundários que o Apache inicia para solicitações do servidor.
A resolução a seguir é para o modelo padrão do módulo de multiprocessamento (MPM) Prefork Apache que os servidores da Web usam. Para confirmar seu MPM, execute o seguinte comando:
# apachectl -V | grep "MPM"
Para calcular o valor aproximado a ser definido para MaxRequestWorkers, determine o quanto seu workload usa as seguintes configurações:
- A RAM física do seu servidor
- A memória mantida após outros serviços usarem a memória
- Seu processo Apache que usa mais memória
Observação: é uma prática recomendada usar uma faixa de 90 a 100% da RAM RESTANTE para MaxRequestWorkers para conciliar o desempenho e a estabilidade do servidor. No entanto, seu workload pode ter necessidades diferentes.
Calcular a RAM física do servidor
Para calcular a RAM, execute o seguinte comando:
# free -m | grep Mem: | awk '{print $2}'
Calcular a memória que permanece após outros serviços usarem a memória
Primeiro, calcule o uso de memória de todos os serviços principais que não são Apache. Execute o seguinte comando para cada serviço:
# usage_mbytes=0; for usage_by_pids in `ps -C $proc_cmd -o rss | grep -v RSS`; do usage_mbytes=$(($usage_mbytes + $usage_by_pids)); done; echo $(($usage_mbytes/1024)) MB;
Observação: no comando anterior, substitua $proc\ _cmd pelo nome ou comando do serviço. Por exemplo, use mysqld para calcular o uso de memória do serviço mysqld.
Depois de calcular o uso de memória de cada serviço, some os valores para obter a soma total do uso de memória por todos os outros serviços principais.
Em seguida, use a fórmula a seguir para subtrair o uso de memória por todos os outros serviços principais da RAM física do seu servidor em megabytes (MB):
Memória restante = (RAM física do seu servidor) - (Uso de memória por todos os outros serviços principais)
Identificar o processo Apache que usa mais memória
Para identificar o processo que usa mais memória, execute o seguinte comando:
# sudo bash -c 'high_mem=0; for pid in $(ps aux | grep -E "httpd|apache2" | grep -v ^root | awk "{print \$2}"); do memory=$(pmap -d $pid | grep "writeable/private" | awk "{print \$4}" | sed "s/[^0-9]//g"); if [[ $memory -gt $high_mem ]]; then high_mem=$memory; fi; done; echo $((high_mem/1024)) MB'
Observe a quantidade de memória que o processo usa.
Calcular MaxRequestWorkers
Use a fórmula a seguir para calcular MaxRequestWorkers:
MaxRequestWorkers = (Memória restante * 90/100)/(Memória consumida pelo maior processo Apache)
Observação: substitua a Memória restante pela memória que permanece após outros serviços usarem a memória e a memória consumida pelo maior processo Apache pela memória usada pelo maior processo.
O cálculo anterior é o mesmo para sistemas baseados em Ubuntu, Debian e RHEL. No entanto, o caminho de configuração do Apache e os nomes dos arquivos dependem do tipo de sistema operacional. Defina MaxRequestWorkers com base no seu sistema operacional.
Observação: os exemplos a seguir usam o Apache versão 2.4 ou posterior.
Debian e Ubuntu
Conclua as etapas a seguir:
-
Para abrir o arquivo /etc/apache2/mods-available/mpm_prefork.conf no modo editor, execute o seguinte comando:
# vi /etc/apache2/mods-available/mpm_prefork.conf -
Altere o parâmetro MaxRequestWorkers pelo valor que você calculou.
Exemplo:<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers your_value MaxConnectionsPerChild 0 </IfModule>Observação: substitua your_value pelo valor calculado de MaxRequestWorkers. Além disso, configure os outros parâmetros para se alinharem às suas necessidades.
-
Salve o arquivo e, em seguida, saia dele.
-
Execute o comando a seguir para realizar uma verificação de sintaxe do Apache:
# apachectl configtest -
Se você receber uma saída de Syntax OK, execute o seguinte comando para reiniciar o Apache:
# systemctl restart apache2
Amazon Linux, CentOS e RHEL
Conclua as etapas a seguir:
-
Crie um arquivo com o caminho /etc/httpd/conf.d/mpm\ _prefork.conf e adicione o seguinte bloco de comando:
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers your_value MaxConnectionsPerChild 0 </IfModule>Observação: substitua your_value pelo valor calculado de MaxRequestWorkers. Além disso, configure os outros parâmetros para se alinharem às suas necessidades.
-
Salve o arquivo e, em seguida, saia dele.
-
Execute o seguinte comando para verificar a sintaxe de configuração do Apache:
# httpd -t -
Se você receber uma saída de Syntax OK, execute o seguinte comando para reiniciar o Apache:
# systemctl restart httpd
Informações relacionadas
- Tópicos
- Compute
- Tags
- Amazon EC2Linux
- Idioma
- Português

Conteúdo relevante
AWS OFICIALAtualizada há 9 meses