Ubuntu Server 15.10,进程不允许使用所有物理内存,kswapd0 使用 100% 的 CPU

Ubuntu Server 15.10,进程不允许使用所有物理内存,kswapd0 使用 100% 的 CPU

我有一台 24 核服务器,配备 64G DRAM,运行的是 Ubuntu Server 15.10。我在交换和物理内存使用方面遇到了一些奇怪的行为。在将 Ubuntu 升级到 15.10 之前,我从未遇到过这个问题。

您可以在‘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 

只有一个用户登录(我),并且我有一个进程使用大量虚拟内存。但是,某些东西将其限制在物理内存的一半左右,而交换分区基本上已满。我观察了这些进程(Synopsys Design Compiler)的运行,它们直到交换分区填满才突破 50% 的标记。另一个奇怪的事情是 kswapd0 占用非常高的 CPU(通常为 100%)。据我所知,kswapd0 应该是 I/O 受限的,因此不会占用太多的 CPU 时间。

我查看了是否有任何限制,但 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限制——内核阻止你使用分配给另一个套接字的内存,除非绝对地必要。在套接字之间传输数据比较困难,很多比从同一插槽上的 RAM 访问它要慢,并且通常会使两个插槽都停止运行,因此只有在最紧急的情况下才可以使用它。

您没有在早期的 Ubuntu 版本上遇到这个问题可能只是因为内核在版本之间改进了它的 NUMA 处理。

相关内容