O que você está vendo é um comportamento normal ao usar o mod_php com o apache2 prefork.
Quando um script php é executado em um processo pré-feito, há algo como um "buffer de memória PHP" nesse processo de pré-carregamento do apache. Ele cresce sempre que o script em execução exige mais memória do que o já alocado, mas só diminui quando o processo pré-fabricado é reciclado (isto é, reiniciado).
Você pode atenuar esse problema configurando ServerLimit
e MaxClients
para (memória do sistema / limite_de_Memória do php), o que levará a não mais que o número de processos pré-fabricados. Esse número multiplicado pelo seu memory_limit do php vai caber na memória.
Você também pode definir MaxRequestsPerChild 1
, mas isso terá um efeito muito ruim no desempenho.
No longo prazo, você provavelmente deve migrar para php-fpm e planejar cuidadosamente o número máximo de processos php com o consumo de memória.