Linux Swap空间是系统在物理内存不足时使用的磁盘交换区域,当Swap利用率过高时,系统会频繁进行内存和磁盘的数据交换,导致整体运行速度下降。过高的Swap占用通常和物理内存不足、系统参数配置不合理、异常进程占用内存等因素有关。

如何查看Swap空间的使用情况
首先可以通过系统自带命令查看当前Swap的总容量、已使用量和利用率,常用的查看命令如下:
# 查看内存和Swap的整体使用情况
free -h
# 查看每个进程的Swap占用情况,按Swap使用量排序
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file; done | sort -k2 -n -r | head -10
通过free -h命令可以快速看到Swap的总大小和已使用量,第二个命令可以定位到具体是哪些进程占用了大量Swap空间,方便后续针对性处理。
Swap利用率过高的常见原因
- 物理内存不足:系统运行的进程过多或者单个进程占用内存过大,物理内存被耗尽后只能大量使用Swap。
- swappiness参数配置过高:该参数控制系统使用Swap的倾向,值越高系统越倾向于提前使用Swap,默认值是60,部分场景可能需要调低。
- 异常进程内存泄漏:某个进程存在内存泄漏问题,持续占用内存不释放,最终触发大量Swap使用。
- Swap空间配置不合理:Swap分区大小设置过大,或者同时存在多个Swap分区导致系统过度使用Swap。
解决Swap利用率过高的具体方案
1. 临时释放Swap空间
如果当前需要快速降低Swap利用率,可以先临时关闭再开启Swap,让系统把Swap中的数据换回物理内存,前提是物理内存有足够的剩余空间:
# 关闭所有Swap分区,执行前确保物理内存剩余量大于Swap已使用量 sudo swapoff -a # 重新开启Swap分区 sudo swapon -a
注意如果物理内存剩余不足,执行swapoff -a会导致系统出现OOM(内存溢出)问题,甚至进程被强制杀死,执行前一定要先确认内存状态。
2. 调整swappiness参数
swappiness的取值范围是0到100,值越低系统越不会主动使用Swap,建议根据服务器场景调整:
# 查看当前swappiness值 cat /proc/sys/vm/swappiness # 临时调整为10,减少Swap使用倾向 sudo sysctl vm.swappiness=10 # 永久生效,编辑sysctl配置文件 sudo vim /etc/sysctl.conf # 在文件末尾添加以下内容 vm.swappiness=10 # 保存后执行以下命令让配置生效 sudo sysctl -p
对于内存充足的业务服务器,可以将该值设置为10甚至更低;如果是桌面系统,可以适当保留默认值或者设置为30左右,平衡内存使用效率。
3. 处理异常占用内存的进程
如果是某个异常进程占用了大量Swap,可以先尝试重启该进程,如果进程反复出现内存泄漏,需要排查代码问题或者升级程序版本:
# 假设异常进程PID是1234,先尝试优雅停止进程 sudo kill 1234 # 如果无法停止,强制杀死进程 sudo kill -9 1234
4. 调整Swap分区配置
如果Swap分区设置过大,可以适当减小Swap容量,或者删除多余的Swap文件/分区:
# 查看当前所有Swap挂载情况 swapon -s # 假设要删除/swapfile这个Swap文件,先关闭它 sudo swapoff /swapfile # 从fstab中删除对应的自动挂载配置 sudo vim /etc/fstab # 找到/swapfile对应的行删除后保存 # 删除Swap文件 sudo rm /swapfile
长期优化建议
除了临时处理方案,还可以从长期角度优化系统内存使用:定期清理不需要的进程和服务,避免无用进程占用内存;如果是业务需要大量内存,可以考虑升级服务器物理内存;对于数据库、缓存类服务,可以针对性调整服务本身的内存配置参数,减少不必要的内存占用。如果系统长期Swap利用率过高,说明物理内存已经无法满足业务需求,升级硬件是最根本的解决方式。
LinuxSwap空间内存优化swapoffswappiness修改时间:2026-07-16 22:03:36