Uma questão de memória para um servidor Apache

2
Mem:   8176880k total,  8059736k used,   117144k free,    93040k buffers
Swap:  1004052k total,      108k used,  1003944k free,  7257056k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 4992 mysql     20   0  291m 115m 5380 S   65  1.4 739:54.71 mysqld             
20260 apache    20   0 43032  18m 3964 S   27  0.2   0:02.50 apache2            
20154 apache    20   0 41588  16m 3964 S   10  0.2   0:00.40 apache2
<snip>

É este: Mem: 8176880k total, 8059736k usado; alguma coisa para se preocupar!?

E ideias?

muito obrigado

edite: esqueci de dizer que não sei nada sobre servidores, já cheguei a este ...

resposta:

> free -m
             total       used       free     shared    buffers     cached
Mem:          7985       7665        320          0         89       6942
-/+ buffers/cache:        633       7352
Swap:          980          0        980

não parece que tenho um problema de memória depois de tudo

    
por Dorjan 24.09.2009 / 16:30

2 respostas

6

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:

por 24.09.2009 / 17:01
2

Tudo bem. Memória livre significa RAM que não é usada por sistemas, aplicativos e cache. Você pode considerar "Buffers" e "Cached" como outra RAM livre. Então você tem cerca de 7 GB de RAM livre. Com o comando:

free

você pode ver a RAM livre "real" na linha: - / + buffers / cache. Você também pode usar o htop.

    
por 24.09.2009 / 17:29