一台云服务器Ubuntu篇:4、启用swap

安装Nginx+PHP+MariaDB后 ,没有恢复数据与配置的情况下,free -h 可用内存只有152M了…

本文为Oracle x86_64免费的1C1G Ubuntu Server 24.04 Minimal环境,在oracle 的镜像里,Swap是默认禁用的。

只能 启用Swap,1G的物理内存,可以添加个2G的swap。

启用swap

首先创建一个做为swap的空文件,并指定大小

sudo fallocate -l 2G /swap

要做为swap使用,必须为0600权限。因此修改文件权限,并转为swap格式文件。

sudo chmod 600 /swapsudo mkswap /swap

然后启用swap

sudo swapon /swap

这时候再用free -h查看,就可以看到已经启用的swap了。但只是临时启用,重启之后就会失效。需要把配置写入/etc/fstab中,才可以在系统重启后自动挂载。

将以下配置写入fstab中:

/swap swap swap defaults 0 0

如果想停用swap。可以使用以下命令停用,再注释fstab中的配置行。

sudo swapoff /swap

vm.Swappiness

Swappiness 是 Linux 内核的一个属性,用于定义系统使用 SWAP 空间的频率。默认值为 60,可以通过以下命令查看和调整:

cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=40

当vm.swappiness的值设置得较低时,比如10,这意味着内核会尽量使用物理内存,而不是swap空间。如果设置得较高,如默认值60,系统会更积极地使用swap空间。在物理内存使用超过一定比例(如40%=100-60)时,系统就会开始将数据交换到swap分区。

对于不同类型的服务器,如Oracle或MySQL,可能需要根据实际运行的应用程序类型来调整这个值,以优化性能。

永久修改: 要永久修改vm.swappiness值,需要编辑/etc/sysctl.conf文件,并添加以下行:

vm.swappiness=40

然后,重新加载配置文件使更改生效:sysctl -p

系统资源查看:vmstat

$ vmstat -S M # 以M为单位显示
procs -----------memory---------- ---swap-- -----io---- -system-- -------cpu-------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st gu
 0  0     17     70     58    582    0    0     8    14   60    0  0  0 100  0  0  0
procsmemoryswap
r: 运行队列中的进程数量
b: 等待 I/O 的进程数量
swpd: 使用的虚拟内存大小(KB)
free: 空闲的物理内存大小(KB)
buff: 用作缓冲区的内存大小(KB)
cache: 用作缓存的内存大小(KB)
si: 每秒从磁盘读入交换区的内存大小(KB/s)
so: 每秒写入磁盘的交换区内存大小(KB/s)
iosystemcpu
bi: 每秒从块设备接收的块数(blocks/s)
bo: 每秒发送到块设备的块数(blocks/s)
in: 每秒中断数(包括时钟中断)
cs: 每秒上下文切换次数
us: 用户进程占用 CPU 时间百分比
sy: 系统进程占用 CPU 时间百分比
id: 空闲 CPU 时间百分比
wa: 等待 I/O 的 CPU 时间百分比
st: 被虚拟机偷取的时间百分比

vmstat 和 top 命令有什么区别?

  • top 提供进程级别的详细信息
  • vmstat 提供系统整体资源使用情况的概览

si/so 值很高说明什么?

  • 表示系统频繁使用交换分区,可能是物理内存不足,建议增加内存或优化应用程序内存使用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注