swappiness 为零,但 swap 仍然被不必要地使用

swappiness 为零,但 swap 仍然被不必要地使用

在我的 Kubuntu 12.04 系统上,我使用 SSD 将交换空间设置为零(如 报告的cat /proc/sys/vm/swappiness),但有时系统会开始使用交换空间,即使内存使用率只有百分之六十或七十(例如,现在 RAM 使用率为 64%,交换空间使用率为 3%)。这是正常的吗?如果是,为什么?如果不是,为什么会发生这种情况?

我认为这可能与禁用 Firefox 中的缓存有关(我这样做的原因与将 swappiness 设置为 0 的原因相同,即尽量减少对磁盘的写入);我认为可能会说低于默认的 swappiness 值将增加内核倾向于交换这些东西。对吗?但即使如此,我也不明白为什么任何交换根本当 swappiness 为并且还有足够的 RAM。

如果原始数字很重要,那么这台机器有 2 GB 的内存和相同大小的交换分区。

编辑后添加:使用下面 Rinzwind 提出的两种方法,我惊讶地发现有多个进程使用交换空间,而 Firefox 不在其中。最大的用户是 KDE 组件。以下是所有非零使用交换空间的进程,以及它们使用的交换空间量(感谢 Rinzwind 的第一个建议):

kwin 15040 kB
plasma-desktop 11668 kB
ksmserver 4752 kB
kglobalaccel 4136 kB
kded4 3860 kB
kactivitymanage 3684 kB
kwalletd 3436 kB
knotify4 3052 kB
kdeinit4 2768 kB
bluedevil-helpe 2720 kB
kio_file 2492 kB
kio_file 2492 kB
klauncher 2464 kB
kio_thumbnail 2392 kB
Xorg 648 kB
cupsd 516 kB
polkitd 460 kB
udevd 380 kB
udevd 380 kB
udevd 376 kB
upowerd 280 kB
rsyslogd 212 kB
obex-data-serve 176 kB
ksysguardd 176 kB
avahi-daemon 176 kB
dbus-daemon 132 kB
avahi-daemon 92 kB
kwrapper4 84 kB
upstart-udev-br 80 kB
init 60 kB
bluetoothd 48 kB
x-session-manag 24 kB
NetworkManager 20 kB
udisks-daemon 16 kB
getty 16 kB
udisks-daemon 12 kB
kuiserver 8 kB

所以我的假设被驳斥了,我比以前更加困惑了。我强调的是,在这个特定情况下,交换使用率突然从 0 上升到 3%(当时我正在 Firefox 中使用 Google 地图)。为什么这是预期的行为?如果不是,为什么会发生这种情况?

答案1

swappiness 设置为零并不意味着系统不使用交换。它告诉内核不要将进程从物理内存中交换出去尽可能长时间并且当 RAM 完全用完时它也不会开始交换。

这是正常的吗?如果是,为什么?如果不是,为什么会发生这种情况?

对此的唯一答案可能就是:默认行为。系统决定这是最佳做法。


您可能首先需要确定负责的进程。因此,这将显示每个进程使用的交换空间(以 root 身份运行,否则它将仅报告由您的用户运行的进程):

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

存储库中有一个名为微电子(也可以以 root 身份运行):

# smem -s swap -t -k -n
  PID User     Command                         Swap      USS      PSS      RSS 
    1 0        /sbin/init splash                  0   872.0K     2.2M     5.6M 
  285 0        /lib/systemd/systemd-journa        0     2.6M     2.6M     4.6M 
  307 0        /lib/systemd/systemd-udevd         0     2.1M     2.2M     4.4M 
  616 100      /lib/systemd/systemd-timesy        0   404.0K   435.0K     2.7M 
  711 0        /lib/systemd/systemd-logind        0   960.0K   986.0K     3.0M 
  715 104      /usr/sbin/rsyslogd -n              0     1.5M     1.5M     3.6M 
  721 0        /usr/sbin/NetworkManager --        0     6.7M     7.3M    17.4M 
  723 0        /sbin/cgmanager -m name=sys        0   364.0K   401.0K     2.6M 
  735 0        /usr/sbin/thermald --no-dae        0     1.2M     1.4M     8.7M 
  736 0        /usr/sbin/anacron -dsq             0   212.0K   238.0K     2.3M 
  741 105      /usr/bin/dbus-daemon --syst        0     1.9M     2.1M     5.4M 
  767 0        /usr/lib/x86_64-linux-gnu/u        0     1.0M     1.1M     5.7M 
 ...

 5097 0        su                                 0   480.0K   675.0K     3.5M 
 5098 0        bash                               0   520.0K     1.0M     3.8M 
 5112 0        /usr/bin/python /usr/bin/sm        0    11.8M    11.8M    14.2M 
-------------------------------------------------------------------------------
  134 12                                          0     1.3G     1.5G     3.3G 

如果您按照此操作并找到负责此问题的特定程序,请编辑您的问题。而且我还相信它会是 Firefox。它占用大量资源,因此可能需要考虑更换浏览器。

相关内容