注意:随着时间的流逝,其中的信息可能已经有所发展或是发生改变。侵删!
前言
由于我的老古董VPS主机是 512M 的 RAM,且自动分配的swap有点小 249MB,服务多了偶尔就会提示内存不足错误。
而swap分区是一块特殊的硬盘空间,操作系统可以在内存不足时用来临时存储数据。因为内存和硬盘的速度差异,系统或程序在调用swap中的数据时会慢一些。
但在系统RAM不足是,适当增加swap分区容量有助于提高系统的性能和稳定性。
提示:以下是本篇文章正文内容,下面案例仅供参考
环境:
# 此处以Ubuntu 1804为例。非 root 用户,请 + sudo
# 查看下系统版本
root@localhost:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04 LTS
Release: 18.04
Codename: bionic
# 查看当前 RAM 和 SWAP使用情况(数据以实际显示为准)
root@localhost:~# free -m
total used free shared buff/cache
Mem: 497 143 18 5 345
Swap: 269 251 10
root@localhost:~# swapon -show # 或者swapon -s
Filename Type Size Used Priority
/swap file 135164 524 -2
# 检查硬盘驱动器分区上的可用空间
root@localhost:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 239M 0 239M 0% /dev
tmpfs 50M 5.5M 45M 11% /run
/dev/sda2 11G 5.0G 4.9G 62% /
tmpfs 249M 0 249M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 249M 0 249M 0% /sys/fs/cgroup
/dev/sda1 453M 38M 392M 9% /boot
tmpfs 50M 0 50M 0% /run/user/0
使用文件划分swap 分区
删除之前的swap文件(如果有)
# 删除 swap
root@localhost:~# swapoff /swap
root@localhost:~#
swapon -s
Filename Type Size Used Priority
root@localhost:~#
cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
/swap none swap sw 0 0
# 删掉 /swap none swap sw 0 0
root@localhost:~#
vi /etc/fstab
/swap none swap sw 0 0 # 删除这行,不同系统swap的名称和路径可能不同
#
# 删除swap 分区或swap 分区文件
#快速删除磁盘分区(该方式快速但需谨慎使用)
root@localhost:~#
dd if=/dev/zero of=/dev/swap bs=1 count=256
256+0 records in
256+0 records out
512 bytes copied, 0.00115978 s, 441 kB/s
#删除swap 分区文件 (推荐)
root@localhost:~#
rm -rf /swapfile
创建一个swap文件
用 dd 命令来创建具有预分配空间的文件,文件名可以是swap、swapfile或者其他文件名称。
root@localhost:~#
dd if=/dev/zero of=/swapfile bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,4.76434 秒,225 MB/秒
/dev/zero 对 swapfile 进行格式化。。
bs 块大小和 count 块数的组合来指定文件大小。也可以指定 1G 的块大小和 1,但是如果在系统本身内存小于 1G 的情况下会由于 输入缓冲导致内存耗尽 而失败 块大小越大速度越快
# 查看
root@localhost:~#
ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Feb 28 22:39 /swapfile
# 启用交换文件,只有 root 用户才能读取和写入
root@localhost:~#
chmod 600 /swapfile
root@localhost:~#
ls -lh /swapfile
-rw------- 1 root root 1.0G Feb 28 22:39 /swapfile
# 设置交换空间
root@localhost:~#
mkswap /swapfile
Setting swap space version 1, size=1048572 KiB
No label, UUID=d945f99d-f025-4b62-adde-1ea635329bfd
# 启用交换空间
root@localhost:~#
swapon /swapfile
# 验证
root@localhost:~#
free -m
total used free shared buff/cache available
Mem: 497 148 18 5 330 334
Swap: 1023 0 1023
root@localhost:~#
swapon -s
Filename Type Size Used Priority
/swapfile file 1048572 0 -2
配置为开机自动启用
# 在/etc/fstab 底部增加一行
root@localhost:~#
vi /etc/fstab
/swapfile none swap sw 0 0
root@localhost:~#
cat /etc/fstab
/swapfile none swap sw 0 0
swap 的使用策略
/proc/sys/vm/swappiness 中设置的值(百分比),决定了当内存使用达到一定的百分比,swappiness 参数配置系统将数据从 RAM 交换到交换空间的频率。如:默认值为30,则内存使用率达到了70%=(100-30)/100,则使用swap 分区
#查看默认设置的策略值
#centos8 的值例是30
[root@CentOS8 ~]#
cat /proc/sys/vm/swappiness
30
#centos7 的值是60
[root@centos7 ~]#
cat /proc/sys/vm/swappiness
60
# # 对于 VPS 系统, 我们将其设置为 30
root@localhost:~#
sysctl vm.swappiness=30
vm.swappiness = 30
# 持久化,在底部添加
root@localhost:~#
vi /etc/sysctl.conf
vm.swappiness=30
root@localhost:~# wq # 保存退出
vfs_cache_pressure是访问有关文件系统的数据 此参数配置系统将选择多少数据缓存 inode 和 dentry 信息。
# 临时配置
root@localhost:~#
cat /proc/sys/vm/vfs_cache_pressure
100
root@localhost:~#
sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
# 持久化配置
root@localhost:~#
vi /etc/sysctl.conf
vm.vfs_cache_pressure = 50 # 在底部,添加指定新值的行
参考文献:
CentOS 7 上添加 Swap - 等一念 - 博客园
https://www.cnblogs.com/nullnullnull/p/11114517.html 创建和删除swap分区_删除swap分区_嘿,丞哥!的博客-优快云博客
https://blog.youkuaiyun.com/xiao_dan_/article/details/108069865 Centos添加、删除swap分区 - 知识一锅 http://www.wsmee.com/post/33 centos添加swap(转载) -
南柯Dream丶 - 博客园 https://www.cnblogs.com/NanKe-Studying/p/17063270.html