小内存VPS占用优化

这篇文章讲讲小内存VPS占用优化方法,适用于512M或以下的VPS,主要讲的是一些内核或者系统方面的优化方法。另,如果你在使用服务器面板,比如宝塔等,这篇文章还是别看了!

选择系统

首先是选择系统,目前俺认为广泛可用且最省内存的系统,还是Debian,因为Debian可以选择内存占用最小的Cloud内核,Cloud内核就是为KVM定制的,去除了云环境不需要的,像蓝牙、声音支持等无用模块。另外Cloud内核不适用于VMware虚拟化或桌面系统,下面就讲讲Debian10更换Cloud内核方法:

首先备份sources.list文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak

修改sources.list文件:
vi /etc/apt/sources.list

添加下面内容:
deb http://deb.debian.org/debian buster-backports main

然后更新一下系统:
apt update

搜索内核:
apt search linux-image | grep cloud-amd64 或者 apt search linux-image | grep buster-backports

会输出类似下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
linux-image-4.19.0-14-cloud-amd64/stable 4.19.171-2 amd64
linux-image-4.19.0-14-cloud-amd64-dbg/stable 4.19.171-2 amd64
Debug symbols for linux-image-4.19.0-14-cloud-amd64
linux-image-4.19.0-14-cloud-amd64-unsigned/stable 4.19.171-2 amd64
linux-image-4.19.0-16-cloud-amd64/stable,now 4.19.181-1 amd64
linux-image-4.19.0-16-cloud-amd64-dbg/stable 4.19.181-1 amd64
Debug symbols for linux-image-4.19.0-16-cloud-amd64
linux-image-4.19.0-16-cloud-amd64-unsigned/stable 4.19.181-1 amd64
linux-image-5.10.0-0.bpo.3-cloud-amd64/buster-backports 5.10.13-1~bpo10+1 amd64
linux-image-5.10.0-0.bpo.3-cloud-amd64-dbg/buster-backports 5.10.13-1~bpo10+1 amd64
Debug symbols for linux-image-5.10.0-0.bpo.3-cloud-amd64
linux-image-5.10.0-0.bpo.3-cloud-amd64-unsigned/buster-backports 5.10.13-1~bpo10+1 amd64
linux-image-5.10.0-0.bpo.4-cloud-amd64/buster-backports 5.10.19-1~bpo10+1 amd64
linux-image-5.10.0-0.bpo.4-cloud-amd64-dbg/buster-backports 5.10.19-1~bpo10+1 amd64
Debug symbols for linux-image-5.10.0-0.bpo.4-cloud-amd64
linux-image-5.10.0-0.bpo.4-cloud-amd64-unsigned/buster-backports 5.10.19-1~bpo10+1 amd64
linux-image-5.10.0-0.bpo.5-cloud-amd64/buster-backports 5.10.24-1~bpo10+1 amd64
linux-image-5.10.0-0.bpo.5-cloud-amd64-dbg/buster-backports 5.10.24-1~bpo10+1 amd64
Debug symbols for linux-image-5.10.0-0.bpo.5-cloud-amd64

建议选择stable版本 linux-image-4.19.0-16-cloud-amd64 安装,注意带有cloud字样的image文件:

apt install linux-image-4.19.0-16-cloud-amd64

重启:
/sbin/reboot

重启后即更换了新内核,另小内存VPS内核不必求新,稳定就好。

另,删除旧内核方法,请看下面这篇文章的“删除旧内核”部分,方法是一样的:

https://hostalk.net/posts/kernel_bbr.html

PS:旧内核删不删是无所谓的,留着可以方便以后随意切换。

增加或删除swap分区

既然内存太小,自然是要设置交换分区了,下面是增加或删除swap分区方法:

首先,检查分区: free -h

1
2
3
              total        used        free      shared  buff/cache   available
Mem: 470M 69M 271M 3.6M 129M 386M
Swap: 512M 0B 512M

如果出现上面Swap字样说明你的VPS是存在swap分区的,这个时候想调整分区大小,俺们就要先删除原有分区,再创建。

找到swapfile文件: find / -name swapfile

cd到存放swapfile的文件夹

停用swap空间: swapoff swapfile

删除swapfile文件: rm swapfile

上面完事后就等于删除swap分区了,接下来创建swap分区。

cd / && mkdir swap && cd swap

创建swap文件,后面的1024是分区大小1g,自己可以根据需要调整。

dd if=/dev/zero of=swapfile bs=1M count=1024

将文件标记为交换空间:

mkswap swapfile

启用该交换文件:

swapon swapfile

另建议给swapfile文件权限为600,也就是root权限,以免出现安全隐患:

chmod 600 swapfile

再次检查一下swap分区是否可用:

swapon --show

最后,设置swap分区为开机自动挂载:

echo "/swap/swapfile none swap sw 0 0" >> /etc/fstab

建议swap分区大小和RAM大小保持差不多即可。

设置 sysctl.conf vm选项

vi /etc/sysctl.conf 添加下面内容:

1
2
3
4
5
#当内存使用率不足10%(默认值60%)时使用 swap,尽量避免使用 swap,减少唤醒软中断进程
vm.swappiness=10

#将选择多少数据缓存inode和dentry信息,默认100可取值50
vm.vfs_cache_pressure=50

保存后:sysctl -p

撤销安全补丁和内核模块加载

撤销安全补丁,比如 Intel CPU 的一些安全漏洞,提升CPU性能,降低内存占用,方法如下:

vi /etc/default/grub

注意是修改 GRUB_CMDLINE_LINUX_DEFAULT= 后面部分内容。

内核5.2或以上修改下面内容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mitigations=off"

内核5.2以下修改成下面内容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off tsx=on tsx_async_abort=off mitigations=off"

最后:
update-grub

去掉一些没必要内核模块加载 (xfs 等),方法如下:

chmod -x /etc/grub.d/30_os-prober

上面主要讲的是一些内核或者系统方面的优化方法,至于第三方软件,比如Nginx、PHP、数据库等优化就不多讲了。

下面是俺512M内存的VPS搭建此博客后的占用情况:

https://hostalk.net/tz.php