Ubuntu Server 15.10, процесс не может использовать всю физическую память, kswapd0 использует 100% CPU

У меня есть 24-ядерный сервер с 64 ГБ памяти DRAM, и он работает под управлением Ubuntu Server 15.10. Я получаю странное поведение в отношении обмена и использования физической памяти. У меня никогда не было этой проблемы, пока я не обновил Ubuntu до 15.10.

Вы можете увидеть мою проблему в "топ":

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 

В систему вошел один пользователь (я), и у меня есть один процесс, использующий большой объем виртуальной памяти. Однако что-то ограничивает его до половины физической памяти, в то время как раздел подкачки в основном заполнен. Я наблюдал, как эти процессы (Synopsys Design Compiler) работают, и они не преодолевают отметку 50%, пока не выполнятся операции подкачки. И еще одна странность в том, что kswapd0 использует очень высокий (обычно 100%) процессор. AFAIK, kswapd0 должен быть привязан к вводу / выводу и поэтому не использовать много процессорного времени.

Я посмотрел, есть ли какие-либо ограничения, но ulimit говорит иначе:

$ 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

Я также пытался установить swappiness на 10, но это не помогло.

Может кто-нибудь помочь мне понять, почему эта система плохо себя ведет?

1 ответ

24-ядерный сервер почти наверняка означает двойной сокет, поэтому вы почти наверняка столкнетесь с ограничениями NUMA - ядро ​​не позволяет вам использовать память, выделенную для другого сокета, если это не является абсолютно необходимым. Передача данных между сокетами намного, намного медленнее, чем доступ к ним из ОЗУ в одном и том же сокете, и обычно останавливает оба сокета, так что это что-то, что должно быть зарезервировано только для самых тяжелых обстоятельств.

То, что вы не использовали его в более ранних выпусках Ubuntu, возможно, просто потому, что ядро ​​улучшило обработку NUMA между выпусками.

Другие вопросы по тегам