Será aumentado para 1600 conexões como exemplo.

Antes de tudo: Como saber o que está acontecendo agora no Servidor?

Para verificar as configurações atuais das conexões execute os coamndos:

apachectl -M | grep mpm

Terá uma resposta como essa:

mpm_event_module (shared)

No meu caso está sendo usado o módulo EVENT

Depois execute o comando para ver a quantidade máxima de conexões:

grep -R "MaxRequestWorkers" /etc/apache2/

Será exibido algo como:

/etc/apache2/mods-available/mpm_worker.conf:# MaxRequestWorkers: maximum number of threads
/etc/apache2/mods-available/mpm_worker.conf: MaxRequestWorkers 150
/etc/apache2/mods-available/mpm_event.conf: MaxRequestWorkers 400
/etc/apache2/mods-available/mpm_prefork.conf:# MaxRequestWorkers: maximum number of server processes allowed to start
/etc/apache2/mods-available/mpm_prefork.conf: MaxRequestWorkers 150
/etc/apache2/mods-enabled/mpm_event.conf: MaxRequestWorkers 400

Você está usando MPM event e hoje o Apache está limitado a:

MaxRequestWorkers 400

Quando você passa disso, aparecem sintomas tipo:

  • lentidão
  • conexões em espera
  • AH00161: server reached MaxRequestWorkers
  • erros 503

🎯 Objetivo

Atender ~1500 conexões simultâneas usando MPM event.


1️⃣ Ajustar o Apache (MPM event)

Edite o arquivo ativo:

sudo nano /etc/apache2/mods-enabled/mpm_event.conf

Use algo assim:

<IfModule mpm_event_module>
ServerLimit 50
StartServers 5
ThreadsPerChild 32
MaxRequestWorkers 1600
MaxConnectionsPerChild 10000
</IfModule>

Por quê esses números?

  • 50 x 32 = 1600
  • MaxRequestWorkers TEM que ser múltiplo de ThreadsPerChild
  • ServerLimit define o teto de processos
  • MaxConnectionsPerChild evita vazamento de memória

2️⃣ Testar se o Apache aceita a config

Antes de reiniciar:

apachectl -t

Se aparecer:

Syntax OK

Beleza.

Depois:

sudo systemctl restart apache2

3️⃣ Conferir se realmente aplicou

apachectl -t -D DUMP_RUN_CFG | grep -E "ServerLimit|ThreadsPerChild|MaxRequestWorkers"

Você deve ver algo próximo de:

ServerLimit: 50
ThreadsPerChild: 32
MaxRequestWorkers: 1600

4️⃣ MUITO IMPORTANTE: limite do Linux (isso derruba 90% dos setups)

🔹 Limite de arquivos abertos

Veja o atual:

ulimit -n

No meu caso tive como resultado 1024.

Para 1600 conexões, isso precisa ser ≥ 5000.

Edite:

sudo nano /etc/security/limits.conf

Adicione:

* soft nofile 65535
* hard nofile 65535

E no systemd do Apache:

sudo mkdir -p /etc/systemd/system/apache2.service.d
sudo nano /etc/systemd/system/apache2.service.d/limits.conf
[Service]
LimitNOFILE=65535

Depois:

sudo systemctl daemon-reexec
sudo systemctl restart apache2

5️⃣ Ver se o Apache está aguentando

Com mod_status ativo:

watch -n 1 "curl -s http://localhost/server-status?auto"

Observe:

  • BusyWorkers
  • IdleWorkers

Se BusyWorkers encostar em 1600 → ainda é gargalo.


⚠️ ALERTA MUITO IMPORTANTE

1500 conexões só funcionam bem se:

  • você usa PHP-FPM (e NÃO mod_php)
  • ou a maioria das conexões é keep-alive / estática
  • servidor tem RAM suficiente (mínimo ~8GB recomendado)

Se for mod_php, 1500 conexões = 💣


📌 Resumo rápido

✔ Aumentar MaxRequestWorkers
✔ Ajustar ServerLimit e ThreadsPerChild
✔ Aumentar ulimit no Linux
✔ Garantir RAM suficiente
✔ Preferir PHP-FPM


Se quiser, para ver o consumo de memória:

free -h
apachectl -M | grep php

Site oficial do apache: https://httpd.apache.org/

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Translate »