Isso está bem - o valor da VIRT geralmente está em torno desta figura ao usar prefork.c
(que eu suponho que você seja):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10385 apache 15 0 376m 48m 3932 R 20.3 1.2 0:01.34 httpd
10423 apache 16 0 376m 46m 4576 S 15.0 1.2 0:01.09 httpd
10153 apache 15 0 337m 61m 4672 S 11.6 1.6 0:03.94 httpd
10419 apache 15 0 383m 54m 4696 S 11.6 1.4 0:01.00 httpd
O valor que você deseja monitorar é RES - esse é o tamanho da maior quantidade de memória que o segmento filho consumiu (no meu caso, o PHP é executado como parte desse encadeamento, daí o "inchaço" como bibliotecas e dados são carregados). O encadeamento não liberará a memória alocada, no entanto, quando o processo do apache eliminar o encadeamento após seus maxrequests conforme
<IfModule prefork.c>
MaxRequestsPerChild 1000
o encadeamento retornará ao consumo de memória nativa.
Para diminuir esses valores, certifique-se de carregar apenas os módulos do apache necessários e monitorar os threads do apache enquanto executa um script PHP muito grande ( ini_set('memory_limit', '128M');
, em seguida, recursivamente carrega dados em uma matriz - isso deve acontecer). Então, durante o uso no mundo real, diminua o valor de MaxRequestsPerChild até ver seu apache RES
em um nível razoável.
Aqui estão alguns artigos de ajuste de parâmetros úteis: