为什么 kswapd 占用了 100% 的 CPU,而且没有交换空间,而且还有足够多的缓存可供使用?

为什么 kswapd 占用了 100% 的 CPU,而且没有交换空间,而且还有足够多的缓存可供使用?

Firefox 占用了大量内存,机器几乎停滞,因为 kswapd/kworker 占用了大部分 CPU。没有交换空间,vm.swappiness在 Linux 4.5.7 (Fedora 24) 上为 =0。

我不明白的是,有将近 1.5GB 的缓存,为什么 Linux 没有为 Firefox/plugin-container 回收这些缓存?kswapd 在做什么?

top - 13:17:15 up  2:47,  4 users,  load average: 9.78, 5.38, 2.35
Tasks: 197 total,   4 running, 193 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.8 us, 47.0 sy,  0.0 ni, 10.0 id, 36.9 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  3922860 total,   105508 free,  2353620 used,  1463732 buff/cache
KiB Swap:        0 total,        0 free,        0 used.     6828 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   49 root      20   0       0      0      0 R 100.0  0.0   2:35.25 kswapd0
 6395 kevin     20   0 1152968 371132   4292 R  31.7  9.5   3:16.59 plugin-containe
 3449 root      20   0       0      0      0 S  26.3  0.0   0:24.49 kworker/u16:3
 5885 root      20   0       0      0      0 S  23.8  0.0   0:34.12 kworker/u16:2
 4246 root      20   0       0      0      0 S  22.9  0.0   0:42.11 kworker/u16:4
 6236 root      20   0       0      0      0 R  19.0  0.0   0:38.84 kworker/u16:1
 4700 root      20   0       0      0      0 S  17.8  0.0   0:40.57 kworker/u16:5
 3473 kevin     20   0 1662688 402008    460 D   8.3 10.2   7:36.45 thunderbird
 1846 elastic+  20   0 4238960 401324    124 S   5.7 10.2   3:05.58 java
 6107 kevin     20   0 2133616 602096  20920 S   5.1 15.3   4:03.21 firefox...

我认为我最近没有做任何与 I/O 写入相关的操作,因此我预计不会有任何脏页刷新到磁盘(SSD),尽管等待时间为 37%,这有点令人惊讶。我抓取了大约 30 秒的时间,topbuff/cache没有发生太大变化,因此我认为它实际上没有将任何页面刷新到磁盘(尽管我不明白为什么等待百分比很高):

$ grep -e "top -" -e "buff/cache" top.txt 
top - 13:17:11 up  2:47,  4 users,  load average: 9.41, 5.23, 2.29
KiB Mem :  3922860 total,   103468 free,  2353456 used,  1465936 buff/cache
top - 13:17:15 up  2:47,  4 users,  load average: 9.78, 5.38, 2.35
KiB Mem :  3922860 total,   105508 free,  2353620 used,  1463732 buff/cache
top - 13:17:21 up  2:47,  4 users,  load average: 10.44, 5.59, 2.43
KiB Mem :  3922860 total,   108700 free,  2354532 used,  1459628 buff/cache
top - 13:17:24 up  2:47,  4 users,  load average: 10.72, 5.73, 2.50
KiB Mem :  3922860 total,   107004 free,  2355112 used,  1460744 buff/cache
top - 13:17:43 up  2:47,  4 users,  load average: 12.64, 6.39, 2.77
KiB Mem :  3922860 total,   108264 free,  2352820 used,  1461776 buff/cache
top - 13:17:46 up  2:47,  4 users,  load average: 12.27, 6.42, 2.79
KiB Mem :  3922860 total,   108580 free,  2352584 used,  1461696 buff/cache

终止firefox并使plugin-container系统恢复正常。我更希望缓存完全刷新以提供更多空间,或者至少 OOM 终止程序在这种情况下运行,而不是Ctrl+Alt+F2因为 KDE 没有响应而不得不这样做,等待登录提示很长时间,最后执行pkill

答案1

这是一个超级用户问题,而不是服务器故障,但我在 Fedora 24 上自己也遇到过这个问题。

这是由 ffmpeg-libs、VDPAU 和我的 GPU/内核引起的。我禁用了 VLC 中的 VDPAU 来“修复”它。

如果“renderD128”的映射显示数百个并且不断增加,则它看起来就像 Shmem 的大小不断增加/proc/meminfo以及受影响的过程。pmap

这很可能是一个执行错误——在视频处理应用程序中禁用 VDPAU 输出。

相关内容