1. 创建交换文件

创建交换文件的最快速最简单的方法是使用fallocate。此命令立即创建预分配大小的文件。我个人阿里云ECS服务器是羊毛制品只有2G内存,所以我创建了一个4G大小的交换分区,文件名为/swapfile,挂载在根目录。

  1. $ sudo fallocate -l 4G /swapfile
  2. # 验证创建交换文件是否无误,包括容量等信息
  3. $ ll -h /swapfile
  4. # -rw-r--r-- 1 root root 4.0G 3月 16 10:53 /swapfile
  5. # 修改文件权限属性,按照建议设置为600,否则提示以下错误
  6. # swapon: /swapfile:不安全的权限 0644,建议使用 0600。
  7. # swapon: /swapfile:读交换区头失败: 无效的参数
  8. $ chmod 600 /swapfile

2. 挂载交换文件

设置交换空间以供系统使用

sudo mkswap /swapfile

正在设置交换空间版本 1,大小 = 4194300 KiB 无标签,UUID=16189ac1-c16f-4a07-bb48-efa4bfda159c

交换文件设置作交换空间

sudo swapon /swapfile

验证设置是否成功,可以检查系统报告的交换空间

swapon -s

文件名 类型 大小 已用 权限 /swapfile file 4194300 0 -1

查看系统内存使用情况

$ free -m

# 前后对比,现在Swap就有了容量信息,不再为0
#               total        used        free      shared  buff/cache   available
# Mem:           1839        1111          79           0         648         570
# Swap:          4095           0        4095

交换已成功设置,操作系统将根据需要开始使用它。

3. 交换文件持久化

交换文件持久化

这里需要一个nano插件
通过yum安装nano插件

yum install nano

交换文件目前已启用,但是当系统重新启动时,系统将不会自动启用该文件以供使用。可以通过修改fstab文件来更改它,该文件是管理文件系统和分区的表。

sudo nano /etc/fstab

在文件中添加一行来告诉操作系统自动使用刚刚创建的交换文件,内容为:

/swapfile   swap    swap    sw  0   0

image.png
添加完行后,可以保存并关闭文件。服务器将在每次启动时检查此文件,以便从现在开始准备好使用交换文件。

调整交换策略配置(可选)

您可以配置一些选项,这些选项会在处理交换时对系统的性能产生影响。在大多数情况下,这些配置是可选的,您所做的更改将取决于您的应用程序需求和个人偏好。

1. Swappiness

swappiness参数确定系统将数据从内存交换到交换空间的频率。这是介于0和100之间的值,表示将触发交换使用的内存使用百分比。⚠️:与交换文件的交互是“昂贵的”,因为它们比与内存的交互慢得多,并且读写速度的这种差异可能导致应用程序性能的显着降低。告诉系统不要依赖交换,通常会使您的系统更快。
值接近于0时,除非绝对必要,否则系统不会将数据交换到驱动器。接近100的值将尝试将更多数据放入交换中以努力保持更多内存空闲。根据应用程序的内存配置文件或服务器的使用情况来设置这些参数。

查看当前的swappiness值

cat /proc/sys/vm/swappiness

CentOS 7默认为30的swappiness设置,这对于大多数台式机和本地服务器来说是一个公平的中间立场。对于VPS系统,我们可能希望将其移近0。

使用sysctl命令将swappiness设置为10

sudo sysctl vm.swappiness=10

同步更新到sysctl配置文件中,持久化:

sudo nano /etc/sysctl.conf

添加内容为:

vm.swappiness = 10

image.png

2. 缓存压力

修改的另一个相关值是vfs_cache_pressure。此设置会影响特殊文件系统元数据条目的存储。不断读取和刷新此信息通常非常昂贵,因此将其存储在缓存中的时间更长,这对于系统的性能非常有用。

cat /proc/sys/vm/vfs_cache_pressure

默认设置为100,当前配置,系统从缓存中删除inode信息的速度太快。我们可以通过使用sysctl以下方式将其设置为更保守的设置,如50:

sudo sysctl vm.vfs_cache_pressure=50

持久化:

sudo nano /etc/sysctl.conf

内容为:

vm.vfs_cache_pressure = 50

image.png

结语

系统运维优化要考虑实际应用场景,按照场景特性进行分配和配置。