Ubuntu Server 15.10, processo não sendo permitido usar toda a memória física, kswapd0 usando 100% de CPU

4

Eu tenho um servidor de 24 núcleos com 64G de DRAM e ele está executando o Ubuntu Server 15.10. Eu estou ficando um comportamento estranho no que diz respeito à troca e uso de memória física. Eu nunca tive esse problema até que eu atualizei o Ubuntu para 15.10.

Você pode ver meu problema em "top":

top - 18:52:09 up 1 day, 2:25, 3 users, load average: 1.64, 1.30, 1.18
Tasks: 525 total, 2 running, 523 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 1.3 sy, 0.0 ni, 97.0 id, 1.4 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 65937528 total, 37526160 used, 28411368 free, 14396 buffers
KiB Swap: 67071996 total, 67071724 used, 272 free. 104304 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
363 root 20 0 0 0 0 R 100.0 0.0 324:02.98 kswapd0 
6725 theosib 20 0 99.398g 0.034t 8920 D 12.0 55.1 59:08.71 common_shell_ex 

Há um único usuário logado (eu), e eu tenho um único processo usando uma grande quantidade de memória virtual. No entanto, algo está limitando a metade da memória física, enquanto a partição swap está basicamente cheia. Eu observei esses processos (Synopsys Design Compiler) sendo executados, e eles não quebram a marca de 50% até que o swap seja preenchido. E outra coisa estranha é que o kswapd0 usa CPU muito alta (geralmente 100%). AFAIK, kswapd0 deve ser ligado a E / S e, portanto, não usar muito tempo de CPU.

Eu olhei para ver se havia algum limite imposto, mas o ulimit diz o contrário:

$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 257447
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 257447
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Eu também tentei configurar o swappiness para 10, mas isso não ajudou.

Alguém pode me ajudar a descobrir por que esse sistema está se comportando mal?

    
por Timothy Miller 06.11.2015 / 01:44

1 resposta

1

O servidor de 24 núcleos quase certamente significa dual socket, então você está quase certamente se deparando com as restrições NUMA - o kernel está impedindo você de usar a memória atribuída ao outro soquete, a menos que seja absolutamente necessário. A transferência de dados entre soquetes é muito, muito mais lenta do que acessá-los da RAM no mesmo soquete, e normalmente protela ambos os soquetes, então é algo a ser reservado apenas para as circunstâncias mais difíceis.

Que você não estava acertando em lançamentos anteriores do Ubuntu é provavelmente apenas porque o kernel melhorou seu manuseio de NUMA entre os lançamentos.

    
por 26.07.2016 / 10:46