为树梅派的Ubuntu增加swap空间并调整性能-爱代码爱编程
版本说明:
Raspberry Pi 3B+
Ubuntu 20.04 server本文参考翻译自这篇文章。
SWAP文件的设置
Swap是硬盘存储的一部分,它被预留给操作系统。当RAM中不再有足够的空间来保存正在运行的应用程序数据的时候,硬盘中的Swap空间可以用来临时存储那些无法再在RAM中保存的数据,这可以增加服务器在其工作内存中保存的信息量。
先看看操作系统是不是已经预留了swap空间:
swapon –show
如果没有任何输出,说明没有swap空间。
再用free -h命令看看:
没想到,我的Raspberry Pi 3B+根本没有预留swap空间,这就是为什么系统经常会出现out of memory的原因。
一般来说,等于或是系统内存量的两倍是一个很好的起点。另一个很好的经验法则是,如果您只是将4G以上的交换用作RAM备用(fallback),那么它可能是不必要的。
查Raspberry Pi 3B+的RAM是多少,从free -h(或则cat /proc/meminfo)中看,RAM是1G。所以,按上述原则,设置1G或2G的SWAP比较合适。
建立一个叫swapfile的swap文件,尺寸是1G:
sudo fallocate -l 1G /swapfile
看一下情况:
ls -lh /swapfile
为这个文件限制特权:
sudo chmod 600 /swapfile
让swapfile变成swap空间:
sudo mkswap /swapfile
开启这个swap文件:
sudo swapon /swapfile
然后看一下是不是起作用了:
重启后上述关于swap的设置会失效,所以需要永久保存所有有关swap的设置。
先备份fstab文件:
sudo cp /etc/fstab /etc/fstab.bak
然后把swap的设置信息放到fstab的后面:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
关于swap的设置完毕。
有关swap文件的两种性能调整参数
swappiness
swappiness参数是将数据从RAM交换到swap空间的频率。这是一个介于0和100之间的值,代表一个百分比。如果值接近零,除非绝对必要,否则内核不会将数据交换到硬盘。记住,与swap文件的交互是“昂贵的”,因为它们比与RAM的交互花费的时间要长得多,并且会导致性能显著降低。告诉系统不要太依赖swap通常会使系统更快。
接近100的值将尝试将更多数据放入swap,以保持更多的RAM空间。根据应用程序的内存配置文件或服务器的用途,在某些情况下这可能会更好。
查看当前的swappiness:
cat /proc/sys/vm/swappiness
输出:60
对桌面系统来说60不是个坏的数字,但是对于服务器,应该接近0.
可以用sysctl改变swappiness的值:
sudo sysctl vm.swappiness=10
这是临时设置,如果需要将设置变成永久的,在etc/sysctl.conf中增加这项:
sudo nano /etc/sysctl.conf
在最底下增加:
vm.swappiness=10
vfs_cache_pressure
此参数可以让系统选择在多大程度上缓存
inode
和
dentry
信息,而不是其他数据。
基本上,这是访问有关文件系统的数据
,而访问这些数据
通常会出现非常昂贵的查找和非常频繁的请求,所以系统缓存这些数据可以显著提高性能。
cat /proc/sys/vm/vfs_cache_pressure
输出:100
由于当前的配置,我们的系统从缓存中删除inode信息的速度太快。我们可以设置为更保守的数字,如50:
sudo sysctl vm.vfs_cache_pressure=50
输出:vm.vfs_cache_pressure = 50
以上也是一个临时设置,永久保存的方法是把设置加到/etc/sysctl.conf中,如下:
sudo nano /etc/sysctl.conf
在最下面,输入:
vm.vfs_cache_pressure=50