Gerenciamento de memória, tendência para trocar

3

Eu estava tendo 768 MB de RAM. Em um dia geral, o MySQL estava usando 100-180 mb de RAM e o MySQL estava trocando 80-120 mb. Eu estava tendo 50-60 mb de RAM livre.

Então eu pensei que deveria atualizar. Então atualizei minha RAM para 1 GB. Depois disso, tenho 200-350 mb de RAM livre. Mas o MySQL usa a mesma quantidade de RAM, mas ainda troca 40-60 mb.

Esse é o meu resultado free -m .

             total       used       free     shared    buffers     cached
Mem:           996        796        200          0         73         97
-/+ buffers/cache:        625        371
Swap:         2047         92       1955

Este é o meu melhor resultado

top - 22:11:23 up 13:35,  1 user,  load average: 0.26, 0.33, 0.35
Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie
Cpu(s): 20.2%us,  1.8%sy,  0.0%ni, 77.8%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1020564k total,   809836k used,   210728k free,    77808k buffers
Swap:  2097144k total,    94880k used,  2002264k free,   102596k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
 2484 mysql     20   0 1845m 165m 4356 S 25.9 16.6 151:33.45  63m mysqld
13777 myuser  20   0  201m  22m 9836 S  0.0  2.3   0:00.42    0 php-cgi
13780 myuser  20   0  200m  21m 9820 S  3.3  2.2   0:00.47    0 php-cgi
13773 myuser  20   0  200m  21m 9820 S  0.0  2.2   0:00.70    0 php-cgi
13775 myuser  20   0  200m  21m 9812 S  5.3  2.2   0:00.42    0 php-cgi
13779 myuser  20   0  200m  21m 9812 S  3.0  2.2   0:00.31    0 php-cgi
13778 myuser  20   0  200m  21m 9812 S  3.6  2.2   0:00.31    0 php-cgi
13776 myuser  20   0  200m  21m 9812 S  3.0  2.2   0:00.31    0 php-cgi
13774 myuser  20   0  199m  20m 9812 S  0.0  2.1   0:00.23    0 php-cgi
 2619 named     20   0  233m 9.8m 1388 S  0.0  1.0   0:04.57 5288 named
 2689 root      20   0  328m 7528 6316 S  0.0  0.7   0:05.14 9648 httpd
13735 root      20   0  106m 4840 3756 S  0.0  0.5   0:00.26    0 sshd
12772 apache    20   0  328m 3932 2040 S  0.0  0.4   0:01.08 9392 httpd
13163 apache    20   0  328m 3916 2036 S  0.0  0.4   0:00.65 9400 httpd
13425 apache    20   0  328m 3912 2036 S  0.0  0.4   0:00.32 9404 httpd
13417 apache    20   0  328m 3908 2036 S  0.0  0.4   0:00.35 9412 httpd
13420 apache    20   0  328m 3908 2036 S  0.0  0.4   0:00.37 9412 httpd

Embora eu tenha 371 mb de RAM livre, meu sistema CentOS 6.3 ainda troca. Agora, a troca é de 90 mb.

Minha pergunta é que apesar de eu ter muita RAM livre, por que o Linux ainda troca? Se foi uma situação ruim, como posso diagnosticar mais? Ou não deveria me importar com isso?

    
por trante 09.02.2013 / 21:24

2 respostas

6

Seu mysqld está configurado para usar 1,8 GB de RAM - provavelmente devido às suas configurações em /etc/my.cnf . Isso é muito mais do que está fisicamente disponível.

Agora, em algum ponto do tempo (você pode instalar sysstat e perguntar sar sobre isso), você recebe solicitações de memória (também PHP) que usam mais memória RAM do que a disponível - assim os sistemas começam a trocar.

No final, a memória não é mais usada, mas também não há acesso a ela. Portanto, o sistema não tem motivos para colocar esse espaço de troca de volta na RAM.

Você pode ajustar o "swappiness" do Linux para mudar esse comportamento.

Existe uma boa pergunta / resposta em "Ask Ubuntu" aqui .

    
por 09.02.2013 / 21:48
0

Vejo que você executou apache com 1G ram , tive um vps no ano passado e teve seu problema. apache precisa de cerca de 300-400 K ram e isso é muito ruim para um VPS , eu removi apache e instalei lighthttpd . você faz isso.

    
por 09.02.2013 / 21:55