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

我有一个带有64G DRAM的24核心服务器,运行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 

有一个用户login(我),我有一个使用大量虚拟内存的进程。 但是,有些东西将其限制在物理内存的一半左右,而交换分区基本上已经满了。 我已经观察了这些进程(Synopsys Design Compiler)运行,并且在交换填充之前它们不会打破50%的标记。 而另一个奇怪的是,kswapd0使用非常高(通常是100%)的CPU。 AFAIK,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,但这并没有帮助。

任何人都可以帮我弄清楚为什么这个系统是行为不端?

24核心服务器几乎肯定意味着双套接字,所以你几乎肯定会碰到NUMA限制 – 内核阻止你使用分配给其他套接字的内存,除非是绝对必要的。 在套接字之间传输数据比从同一个套接字上的RAM访问慢得多,并且通常会阻塞两个套接字,所以只能在最恶劣的情况下才能保留数据。

在早些时候的Ubuntu发行版中,你没有触及它可能仅仅是因为内核在两次发行之间改进了NUMA处理。