Você pode fazer um swapoff
- precisará de privilégios de root,
mas acho que isso não é um problema para você.
Às vezes, o kernel parece ter a intenção de manter, e. firefox no swap, mesmo que haja memória física suficiente disponível e eu esteja usando o firefox:
robert@rm:~> free -m
total used free shared buffers cached
Mem: 3009 1904 1104 0 109 679
-/+ buffers/cache: 1116 1892
Swap: 4102 885 3216
Existe um comando para instruir o kernel a descartar o espaço de troca e usar a memória livre disponível?
Atualização : embora no curto prazo eu usei swapon / swapoff, eu agora defini
sudo sysctl vm.swappiness=30
como sugerido em outra resposta, e obtenha resultados muito bons.
Você pode fazer um swapoff
- precisará de privilégios de root,
mas acho que isso não é um problema para você.
Você pode fazer o que o nik sugeriu e usar o swapoff . No entanto, existe outra maneira mais elegante de ajustar o "swappiness", ou quão agressivamente o kernel troca os programas no disco em sistemas que executam os kernels 2.6.
Houve debates acalorados nas listas de discussão do kernel do Linux sobre a política que o kernel deve seguir em relação ao comportamento de troca . O resultado é que agora temos um patch nos kernels 2.6 que nos permite ajustar este comportamento em grande medida.
Note que você precisa de privilégios de root para fazer isso, como você executaria os comandos swapoff / swapon.
O valor atual de "swappiness" pode ser inspecionado no arquivo / proc / sys / vm / swappiness , ou executando este comando sysctl :
sudo sysctl vm.swappiness
Os valores "swappiness" podem variar de 0 (sem troca) a 100 (swap para disco tanto quanto possível). O Ubuntu vem com o swappiness padrão configurado para 60.
Para mudar isto para uma sessão, chame sysctl novamente e passe um valor swappiness para usar:
sudo sysctl vm.swappiness=30
Além de free , você pode monitorar os efeitos de fazer isso através dos excelentes utilitários htop ou iotop .
Se você gostar do que vê e quiser manter esse valor entre as reinicializações, coloque "vm.swappiness = 30" no /etc/sysctl.conf arquivo.
$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30
Você pode jogar com diferentes valores até encontrar um que implique um nível aceitável de troca em sua máquina.
Lembre-se de que as coisas trocadas foram colocadas lá em um horário mais ocupado do que agora.
Você pode também achar que os dados são também na RAM - tendo sido carregados de volta para uso, mas não apagados da troca. O kernel faz isso para economizar tempo no próximo período ocupado - se os dados já estiverem copiados, ele pode liberar a RAM que está usando, em vez de ter que gravar primeiro. Então, a menos que você saiba que a máquina não precisará mais ser trocada em um futuro próximo, forçar a liberação do espaço de swap pode não conseguir nada além de retardar as coisas um pouco mais na próxima vez que a troca for necessária. / p>
Isso é gerenciado com base em delete-on-write, portanto, se a cópia na RAM for atualizada, os blocos na troca serão liberados.
Se o espaço de troca for necessário para outra coisa, o que não será no momento, já que você tem bastante liberdade, ele será liberado para esse uso.
Você não pode ver quantos dados estão nesse estado (de estar nas páginas baseadas em disco nas áreas de troca e na RAM) na saída de free
. Você pode vê-lo através do sistema de arquivos /proc
especial. Veja a saída de cat /proc/meminfo
para a contagem SwapCached
.
Outras duas razões para que haja swap em uso quando aparentemente há memória sobressalente são
free
que é provavelmente não é o caso aqui, já que você tem um pedaço de RAM não alocado, bem como aquele usado pelo cache / buffer de IO. Lembre-se de que free
é apenas um instantâneo do uso da memória. O resultado que você está vendo pode implicar que, em algum momento no passado, o sistema estava ficando sem RAM, então trocava o material residente na RAM. Desde então, a RAM tornou-se livre, mas o material em swap não foi requerido, portanto, ainda é mantido em swap, em vez de apenas sobrecarregar a RAM. Se for esse o caso, desligar o swap seria uma má ideia. Há algum processo que possa exigir uma quantidade tão grande de RAM desde a última recarga?
Além disso, você pode querer verificar se você não tem uma restrição no tamanho máximo de residentes configurado via ulimit (geralmente em / etc / profile, mas talvez varie com distribuições e possa ser definido por processo (por exemplo, em um script de lançamento)).
Por fim, no Microsoft Windows, há relatos de problemas específicos com o Firefox sendo colocado em disco, por exemplo, quando minimizado (por exemplo, link ). Eu não ouvi falar disso em sistemas GNU / Linux, mas pode valer a pena explorar.