Se minha área de trabalho ficar sem memória e trocar muito, liberto ou mato o aplicativo que está desperdiçando minha RAM. Mas, depois disso, todos os meus aplicativos / área de trabalho foram trocados e são terrivelmente lentos. Você conhece uma maneira de "desassociar" (recarregar do espaço de troca na RAM) meus aplicativos / área de trabalho?
20
swapon
/swapoff
(como sugere a resposta atualmente aceita), convém desassociar seu gerente de exibição e todos os seus filhos despejando suas memórias de processo (que forçam desassociar). Consulte também “Como forçar a troca de um processo zsh alternado?” No stackoverflow.Respostas:
Se você realmente tiver RAM suficiente disponível novamente, poderá usar esta sequência (como root):
(para forçar a troca explícita de todos os seus aplicativos)
(supondo que você esteja usando linux)
fonte
O script python rápido e sujo a seguir despeja a memória de um processo no stdout. Isso tem o efeito colateral de carregar qualquer página trocada ou arquivo mapeado. Chame-o como
cat_proc_mem 123 456 789
onde os argumentos são IDs de processo.Este script é completamente específico para Linux. Pode ser adaptável a outros sistemas com uma
/proc
estrutura semelhante (Solaris?), Mas esqueça de executá-lo, por exemplo, * BSD. Mesmo no Linux, pode ser necessário alterar a definiçãoc_pid_t
e os valores dePTRACE_ATTACH
ePTRACE_DETACH
. Este é um script de prova de princípio, que não serve como exemplo de boas práticas de programação. Use por sua conta e risco.Linux disponibiliza a memória de um processo como
/proc/$pid/mem
. Somente determinados intervalos de endereços são legíveis. Esses intervalos podem ser encontrados lendo as informações de mapeamento de memória do arquivo de texto/proc/$pid/maps
. O pseudo-arquivo/proc/$pid/mem
não pode ser lido por todos os processos que têm permissão para lê-lo: o processo do leitor deve ter chamadoptrace(PTRACE_ATTACH, $pid)
.Veja também mais informações em
/proc/$pid/mem
.fonte
kill -CONT 1234
onde 1234 é o PID) para continuar.Apenas para completar, o GDB pode despejar a imagem do processo. Eu não verifiquei se ele a desassocia, mas precisa --- não há outra maneira de ler toda a memória do processo:
gdb -p $mypid
seguida por
(gdb) gcore /tmp/myprocess-core
Saved corefile /tmp/myprocess-core
fonte
gcore $pid
é também disponível fora do gdb (como um script pequeno)gdb --batch -p $pid -ex "gcore /dev/null" 2>/dev/null
O swapon / swapoff limpará completamente seu espaço de troca, mas você também pode liberar parte dele através do sistema de arquivos / proc. Você quer o primeiro:
via http://linux-mm.org/Drop_Caches
fonte
sysctl vm.drop_caches=X
. Além disso, o sysctl é mais fácil de sudo.