1. 创建交换文件
创建交换文件的最快速最简单的方法是使用fallocate。此命令立即创建预分配大小的文件。我个人阿里云ECS服务器是羊毛制品只有2G内存,所以我创建了一个4G大小的交换分区,文件名为/swapfile,挂载在根目录。
$ sudo fallocate -l 4G /swapfile
# 验证创建交换文件是否无误,包括容量等信息
$ ll -h /swapfile
# -rw-r--r-- 1 root root 4.0G 3月 16 10:53 /swapfile
# 修改文件权限属性,按照建议设置为600,否则提示以下错误
# swapon: /swapfile:不安全的权限 0644,建议使用 0600。
# swapon: /swapfile:读交换区头失败: 无效的参数
$ 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
添加完行后,可以保存并关闭文件。服务器将在每次启动时检查此文件,以便从现在开始准备好使用交换文件。
调整交换策略配置(可选)
您可以配置一些选项,这些选项会在处理交换时对系统的性能产生影响。在大多数情况下,这些配置是可选的,您所做的更改将取决于您的应用程序需求和个人偏好。
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
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
结语
系统运维优化要考虑实际应用场景,按照场景特性进行分配和配置。