Quem está usando a memória swap e por quê?

4

Meu servidor de banco de dados está usando 191 MB de espaço de troca - mas também mostra 182MB de RAM livre

A caixa é um servidor MySQL dedicado, rodando Debian Lenny.

Como posso determinar quem e por que está preenchendo o espaço de troca em vez de usar a RAM livre?

    
por Miko 14.11.2010 / 22:29

4 respostas

13

Digite top , então pressione f para editar os campos visíveis, pressione p para mostrar o uso da troca, e então pressione Enter de volta para a exibição de programas. Use Shift + e > para ordenar pelo uso da troca.

O Linux troca dados da RAM com base em quão provável é (na opinião personificada do Linux) que ele precisará ser encaminhado a qualquer momento em breve. Você pode alterar seu swappiness para aumentar / diminuir a probabilidade de isso acontecer.

    
por 14.11.2010 / 22:49
1

Isso não é fácil de responder - dê uma olhada aqui: link .

Você pode usar o comando top para ver o uso da troca, digite man top ou pesquise no Google.

Quanto ao porquê - uma situação possível é a seguinte. Digamos que você tenha 1 GB ou RAM. Então você carrega 2GB no valor de aplicativos (incluindo o SO para isso). Você terá 1 GB de RAM usado e 1 GB de swap usado. Em seguida, você descarrega 1,5 GB de aplicativos. Você poderia supor que você teria 0,5 GB de RAM livre e tudo livre de swap. No entanto, completamente pode não ser o caso. Por exemplo, se você carregou 3 aplicativos:

  • A - 1 GB,
  • B - 900 MB
  • C - 100 MB

então usado A ativamente, é provável que ambos B e C sejam trocados para o disco, para fazer uso de RAM e, portanto, rápido. Quando você fecha A e muda para C, você teria 100 MB de RAM usados e B ainda seria trocado (900 MB de swap usado), já que não é necessário.

Para simplificar, o kernel tenta usar a RAM e trocar a maneira como ela acha que será eficiente. Trocar o uso enquanto ainda há RAM livre não significa necessariamente que seu sistema está funcionando mais lentamente do que poderia.

    
por 14.11.2010 / 22:51
1
free -m

Observe a linha de buffers +/- do seu verdadeiro RAM menos os buffers do sistema de arquivos. A carga do SO moderno normalmente usa arquivos na memória e o kernel os libera conforme necessário.

Por exemplo

             total       used       free     shared    buffers     cached
Mem:          3483       1702       1780          0        299        778
-/+ buffers/cache:        623       2859
Swap:         3999          0       3999

Correndo eu veria que eu tenho 1.7gigs livre de memória, mas se eu olhar livre -m vejo que eu realmente tenho 2.8gigs livre. O outro 1,1 gig é o cache do sistema de arquivos.

    
por 14.11.2010 / 23:50
1

Apenas um ponto sobre memória trocada, para suportar o comentário de ErikA à resposta de James:

It's not a bad thing that you're seeing some swap usage. As James said, the kernel will opportunistically swap out memory pages that are unlikely to be used. This frees up RAM for other apps that may need it, and will only in very rare occasions induce performance penalties.

Os dados trocados de RAM existirão tanto na RAM quanto no disco de troca até que a RAM seja reivindicada para outra finalidade, assim como os arquivos do mmap. Pelo que entendi, se um processo decide usar esses dados antes de ser recuperado, ele não precisa ser trocado novamente. A troca geralmente é boa, mas há duas razões principais para você não querer:

  1. Você está tentando conservar energia: ansiosamente, a troca geralmente aumenta a quantidade de disco girando, uma vez que não será necessária alguma correção de troca;
  2. O swap pode melhorar o zippiness de um processo cujo desempenho você pode não se importar, às custas de um processo cuja latência é um problema.

A troca oportunista pode ser eliminada com echo 0 > /proc/pid/vm/swappiness .

    
por 19.11.2010 / 11:57