在我的 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。它占用大量资源,因此可能需要考虑更换浏览器。