#1 楼
Linux内核提供了一个可调整的设置,用于控制交换文件的使用频率,称为swappiness。swappiness设置为零表示除非绝对必要(否则内存不足),否则将避免使用磁盘,而swappiness设置为100意味着程序将几乎立即被交换到磁盘。
Ubuntu系统默认为60,这意味着如果内存使用量大约是我的RAM的一半,则交换文件将被相当频繁地使用。您可以通过运行以下命令检查系统自身的swappiness值:
one@onezero:~$ cat /proc/sys/vm/swappiness
60
由于我有4 GB的RAM,我想将其调低为10或15。 RAM使用率约为80%或90%。要更改系统交换值,请以root用户身份打开
/etc/sysctl.conf
。然后,将以下行更改或添加到文件中:vm.swappiness = 10
应用更改。
sudo sysctl -p
还可以在系统仍在运行时更改值:
sysctl vm.swappiness=10
还可以通过以root用户身份运行
swapoff -a
然后swapon -a
来清除交换,而无需重新启动即可达到相同的效果。要计算交换公式:
free -m (total) / 100 = A
A * 10
root@onezero:/home/one# free -m
total used free shared buffers cached
Mem: 3950 2262 1687 0 407 952
-/+ buffers/cache: 903 3047
Swap: 1953 0 1953
因此总数为3950/100 = 39.5 * 10 = 395
所以这意味着当剩余10%(395 MB)的ram时,它将开始使用swap。
的帮助。 Ubuntu的。交换
什么是swappiness
swappiness参数控制内核将进程移出物理内存并移到交换磁盘上的趋势。因为磁盘比RAM慢得多,所以如果进程过于积极地移出内存,这可能导致系统和应用程序的响应时间变慢。
swappiness
的值可以在0到100之间。swappiness=0
:内核版本3.5及更高版本:禁用交换性。
低于3.5的内核版本:避免尽可能长的时间从物理内存中交换进程。
swappiness=1
:内核版本3.5及更高版本:最小交换而不完全禁用它。
swappiness=100
:告诉内核积极地从物理内存中交换进程并将它们移到交换缓存。
请参见http://en.wikipedia.org/wiki/Swappiness。
Ubuntu中的默认设置为
swappiness=60
。降低swappiness的默认值可能会提高典型Ubuntu桌面安装的整体性能。建议使用swappiness=10
的值,但请随时尝试。示例
以91%的比率开始使用swap:
由于我已经配置了系统和vm要在90%的内存中使用RAM,在90%的内存中没有交换。
之后,我打开了Firefox&Shutter之类的一些应用程序,由于RAM的使用率超过90%,它开始交换。
评论
Swappiness为100不会使程序立即被换出,而当ram占满60%或90%时,值60或90也不意味着使用交换。这是优先级的比率,即从缓存中窃取页面与在空间不足时将其交换以释放一些内存的偏好。较低的值强烈希望从缓存中窃取页面,较高的值强烈希望尝试将页面换出。该设置仅在(几乎)全部用完内存后才有效,内核必须选择释放内存的方式。
–psusi
2012年2月13日19:15
您需要指出,正在运行的程序未占用的RAM被用作磁盘高速缓存...因此,通过减少交换性,可以增加不被交换出程序的机会,但同时减小大小磁盘缓存的数量,这会使磁盘访问速度变慢。因此,此设置对实际性能的影响并不是那么简单...当然,我们欢迎您进行实验,但我怀疑默认设置是由对本主题足够了解的人设置的:
–谢尔盖
2012年2月14日下午0:42
@Sergey和具有讽刺意味的是,那些RAM较小的人最有可能尝试各种技巧以提高性能,并且更有可能成为60岁甚至更高的人。我们当中的一些人将其设置为10,因为我们拥有的RAM吨数增加的幅度没有损失的多。
–琼·汉娜(Jon Hanna)
2012年8月7日在1:35
@Freedom_Ben:请参见linuxatemyram.com :)
–谢尔盖
2014年5月14日在7:16
只是在这里留下了类似的讨论-unix.stackexchange.com/questions/88693/…
–伊利亚·林恩(Elijah Lynn)
2015年11月4日13:59
评论
一个衬里sudo bash -c“ echo'vm.swappiness = 15'>> /etc/sysctl.conf”@redanimalwar,您还需要运行sudo sysctl -p来从sysctl.conf文件中加载新的swappiness值,否则更改仅在下次重启时适用。