Rob*_*anu 10 memory linux swap
有时内核似乎有意将 firefox 保持在交换中,即使有足够的物理内存可用并且我正在使用 firefox:
robert@rm:~> free -m
total used free shared buffers cached
Mem: 3009 1904 1104 0 109 679
-/+ buffers/cache: 1116 1892
Swap: 4102 885 3216
Run Code Online (Sandbox Code Playgroud)
是否有命令指示内核删除交换空间并使用可用的空闲内存?
更新:虽然在短期内我使用了 swapon/swapoff,但我现在设置
sudo sysctl vm.swappiness=30
Run Code Online (Sandbox Code Playgroud)
正如另一个回复中所建议的那样,并获得非常好的结果。
小智 15
您可以按照 nik 的建议进行操作并使用swapoff。然而,还有另一种更优雅的方法来调整“交换”,或者内核将程序交换到运行 2.6 内核的系统中的磁盘的积极程度。
在 linux 内核邮件列表上,关于内核应该遵循的关于交换行为的策略一直存在激烈的争论。结果是我们现在在 2.6 内核中有一个补丁,可以让我们在很大程度上调整这种行为。
请注意,您需要 root 权限才能执行此操作,就像运行 swapoff/swapon 命令一样。
“swappiness”的当前值可以在/proc/sys/vm/swappiness文件中检查,或者通过运行这个sysctl命令:
sudo sysctl vm.swappiness
Run Code Online (Sandbox Code Playgroud)
“swappiness”值的范围可以从 0(无交换)到 100(尽可能多地交换到磁盘)。Ubuntu 附带的默认 swappiness 设置为 60。
要为会话更改此设置,请再次调用 sysctl 并向其传递要使用的 swappiness 值:
sudo sysctl vm.swappiness=30
Run Code Online (Sandbox Code Playgroud)
除了free,您当然可以通过出色的htop或iotop实用程序来监控执行此操作的效果。
如果您喜欢所看到的内容,并希望在重新启动后保留此值,只需将“vm.swappiness=30”放在/etc/sysctl.conf文件中。
$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30
Run Code Online (Sandbox Code Playgroud)
您可以使用不同的值,直到找到一个需要在您的机器上进行可接受的交换级别的值。
请记住,swap 中的东西是在比现在更忙的时候放在那里的。
您很可能会发现数据也在RAM 中 - 已加载回以供使用,但未从交换中擦除。内核这样做是为了在下一个繁忙时期节省时间——如果数据已经复制到那里,它可以释放它正在使用的 RAM,而不必先进行磁盘写入。因此,除非您知道机器在不久的将来不需要再次交换,否则强制释放交换空间可能只会在下次需要交换时减慢速度之外无济于事。
这是在写时删除的基础上管理的,因此如果更新 RAM 中的副本,则交换中的块将被释放。
如果其他东西需要交换空间,因为你有足够的空闲时间,它目前不会,它当然会被释放用于该用途。
在free. 你可以通过/proc特殊的文件系统看到它。看看输出cat /proc/meminfo的SwapCached计数。
当明显有空闲内存时使用交换的另外两个原因是
free输出可能并非如此有一大块真正未分配的 RAM 以及 IO 缓存/缓冲区使用的 RAM。