Como posso saber qual processo está causando o uso do kswapd?

23

Eu vejo o kswapd usando 100% da CPU ... como posso saber em qual nome do processo o kswapd está sendo usado tanto?

Deshawn
fonte
1
Uhm. O kswapd é o processo. É executado em nome do kernel.
mailq
2
@ mailq ... sim, mas não está trocando a memória de algum espaço do usuário? e, em caso afirmativo, como saber qual a memória do processo que está sendo trocada naquele momento?
Deshawn

Respostas:

18

O kswapd está gerenciando o espaço de troca em resposta a demandas de memória maiores do que o disponível fisicamente para todos os processos.

É independente do processo, interessa-se apenas a quais páginas são acessadas e quando (é mais complexo que isso, é claro, mas, para manter as coisas simples, podemos também vê-las dessa maneira).

Portanto, a verdadeira questão é "quais processos têm o maior ônus na memória que estão fazendo com que o kswapd precise paginar o tempo todo".

Isso é mais facilmente respondido usando 'top' e alternando para o modo de classificação de uso de memória.

Paulo
fonte
Obrigado!. O skswapd é ativado APENAS quando as páginas reais tocadas excedem o físico ou é ativado mesmo que um processo tenha alocado a memória ou mapeado a região SHM, mas não a tenha usado? Ou seja, é apenas quando o problema ocorre ou ele faz a manutenção e troca de livros, mesmo que exista memória física disponível, mas apenas porque algum processo está ocioso etc.?
Deshawn
Pelo que entendi, o kswapd, em circunstâncias normais, removerá quaisquer páginas da memória principal que não precisem estar lá, porque qualquer página liberada é aquela que pode ser usada para armazenamento em cache ou outros processos. Ou seja, é melhor ter uma página antiga não utilizada já em disco, em vez de incorrer no custo de lentidão de movê-la em resposta a uma solicitação de memória de outro processo.
Paul
Mesmo que uma máquina precise usar muito espaço de troca, não deve demorar 100% da CPU para fazer isso. Algo está estranho.
Zaz
@Zaz Não é tanto o fato de estar usando o poder de processamento da CPU para fazer trocas, é que a CPU é 100% usada devido ao IOWAIT. Cada vez que a memória precisa ser trocada do disco, a CPU tem que ficar lá e aguardar - IOWAIT, e não está fazendo mais nada (em média).
Paulo
@Paul: Você tem certeza? topestá me dizendo que não há tempo gasto na espera de IO e quase 100% do tempo no sistema. Mais informações: kswapd muitas vezes usa 100% da CPU quando permuta está em uso
Zaz
9

Você pode criar um script .. mas também pode fazê-lo via top

Execute o topo e pressione O seguido de p e digite

Agora todos os processos são classificados pelo uso de swap e você pode ver quais estão usando

Mike
fonte
2
O traz opções de filtro para mim, pressionando p digite me dá " 'include' delimitador filtro está faltando"
Sombra
@ Shadow O mesmo problema, aqui está um comando alternativo: unix.stackexchange.com/questions/128953/…
Björn
8

Se você estiver no Ubuntu 15.10 ou superior, isso pode realmente ser o resultado de um bug , especialmente se o seu sistema for uma máquina virtual sem uma partição de troca (por exemplo, AWS EC2). O problema existe em outras distribuições , mas, até o momento, não está claro se a mesma correção funciona universalmente.

Uma solução temporária:

sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules
sudo reboot

Observe que isso desativará o hotadding RAM / CPUs para máquinas virtuais Xen e Hyper-V.

Zenexer
fonte
Isso surgiu do nada no meu sistema no Kubuntu 16.10 com a solução alternativa já ativada há um tempo atrás.
jeteon
@ jeteon Existem vários problemas que podem causar esse comportamento; isso acontece por ser particularmente comum.
Zenexer
Sim. Descobri que o echo 3 > /proc/sys/vm/drop_cachesalivia assim que começa a acontecer. Agora tenho o comando preventivamente em um trabalho cron agora e parece ajudar, ou pelo menos limitar a duração do massacre da OOM, quando estou longe do computador.
jeteon
6

Também parece haver um bug em kswapdalgum lugar, espero apenas em kernels antigos.

Quase todos os dias, o kswapd entra em operação aleatoriamente em algumas máquinas em um cluster maior (com um kernel não atual). CPU 100% nos dois processos kswapd. Nenhum outro processo em execução (exceto o ssh shell), bastante RAM livre (mais de 700 MB) e nenhum SWAP usado. Sem troca, sem troca também.

Nada explica ainda, por que uma máquina específica é atingida e outra não. Parece não ser completamente aleatório, porque geralmente atinge mais de uma máquina em um curto espaço de tempo. Parece que máquinas que estão ociosas, bem como máquinas que estão sob alta pressão, são menos (!) Provavelmente atingidas pelo efeito. Portanto, ele tem a ver com a carga de trabalho e só atinge se a máquina não estiver ociosa nem muito ocupada.

Se o problema ocorrer, nada mais ajuda. Matando todos os processos (que não se tornaram inomináveis), desmontando todos os sistemas de arquivos, nada. kswapdainda permanece com 100% da CPU. Suspeito de alguma corrida spinlock nos kernels SMP, mas também é provável que eu esteja errado.

Talvez veja minha resposta serverfault.com/questions/316995/#493257

Notas:

  • A reinicialização das máquinas afetadas geralmente falha porque o processo de desligamento começa a travar em algum lugar.
  • Não há conexão direta com a Internet. Causas estrangeiras são improváveis.
  • Parece depender do tipo de carga de trabalho que as máquinas processam da perspectiva de uma carga, porque temos máquinas que nunca foram afetadas (ainda).
  • Desculpe, não posso ser mais específico sobre o que fazemos e por quê.
  • Sim, estou especulando. Porque é um efeito extremamente intrigante, hoje.
Tino
fonte
Isso é histórico. RedHat confirmado: Foi um problema do kernel 2.6.18-194.el5 em combinação com o cliente NFS. Já foi consertado em 2012. Veja a resposta vinculada no meu texto para um pouco mais de informação. Se você acertar hoje, provavelmente é outra causa.
Tino
1
Isso ainda é um problema em alguns lugares. Eu já vi várias delas aparecerem. aqui e aqui estão alguns exemplos.
trueCamelType