Linux系统中的虚拟内存机制通过将部分内存数据交换到磁盘的swap空间,扩展了系统可用的内存范围,但是不合理的虚拟内存配置会导致频繁的磁盘IO,反而降低系统性能。下面将从基础概念、参数调整、实操步骤等方面介绍虚拟内存的调优方法。

Linux虚拟内存基础概念
虚拟内存是Linux内存管理的重要组成部分,它由物理内存和swap空间共同组成。当物理内存不足时,内核会将不常用的内存页移动到swap分区,释放出物理内存供活跃进程使用。swap可以是独立的磁盘分区,也可以是swap文件,二者在功能上没有本质区别。
内核中有一个关键参数vm_swappiness,它控制着内核将内存页交换到swap的倾向程度,取值范围是0到100。数值越高,内核越倾向于使用swap空间;数值越低,内核越倾向于保留物理内存中的数据。
查看当前虚拟内存状态
在调整虚拟内存之前,首先需要了解当前系统的内存和swap使用情况,常用的查看命令如下:
- free命令:查看内存和swap的总量、使用量、剩余量
- swapon命令:查看系统启用的swap分区或文件信息
- vmstat命令:查看内存、swap、IO等系统资源的实时状态
以下是free命令的示例输出:
# 查看内存和swap使用情况,-h参数表示以人类可读的单位显示
free -h
# 输出示例
total used free shared buff/cache available
Mem: 7.7G 2.1G 1.2G 128M 4.4G 5.2G
Swap: 2.0G 0B 2.0G
调整vm_swappiness参数
vm_swappiness的默认值通常是60,对于大多数桌面系统来说这个值是合理的,但是对于数据库、缓存服务等对延迟敏感的服务,通常需要降低这个数值,减少swap的使用,避免磁盘IO带来的性能损耗。
临时调整参数
临时调整的方式在系统重启后会失效,适合临时测试场景,命令如下:
# 将swappiness设置为10,降低swap使用倾向 sudo sysctl vm.swappiness=10 # 查看当前设置的值 sysctl vm.swappiness
永久调整参数
如果需要永久生效,需要修改系统配置文件,步骤如下:
# 编辑sysctl配置文件 sudo vim /etc/sysctl.conf # 在文件末尾添加以下内容 vm.swappiness=10 # 保存退出后,执行以下命令让配置生效 sudo sysctl -p
管理swap空间
创建swap文件
如果系统没有配置swap,或者需要扩容swap,可以创建swap文件,步骤如下:
# 创建一个大小为2G的swap文件,bs是块大小,count是块数量 sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 # 设置文件权限,只有root用户可以读写 sudo chmod 600 /swapfile # 将文件格式化为swap格式 sudo mkswap /swapfile # 启用swap文件 sudo swapon /swapfile # 查看是否启用成功 swapon --show
如果需要永久启用这个swap文件,需要将其添加到fstab文件中:
# 编辑fstab文件 sudo vim /etc/fstab # 在文件末尾添加以下内容 /swapfile none swap sw 0 0 # 保存退出即可
调整swap使用优先级
如果系统有多个swap空间,可以通过调整优先级决定内核优先使用哪个swap。优先级数值越高,越优先被使用,调整方式如下:
# 临时调整swap文件的优先级为10,优先级范围-1到32767 sudo swapon -p 10 /swapfile # 永久调整需要在fstab中添加pri参数 /swapfile none swap sw,pri=10 0 0
其他虚拟内存相关调优参数
除了vm_swappiness之外,还有一些其他内核参数可以辅助优化虚拟内存性能:
- vm.dirty_ratio:控制内存中脏页占总内存的百分比阈值,达到这个阈值后会触发回写
- vm.dirty_background_ratio:控制后台回写脏页的阈值,低于这个值时后台回写进程开始工作
- vm.overcommit_memory:控制内存超额分配的策略,0是启发式分配,1是允许超额分配,2是禁止超过swap+物理内存一定比例
这些参数同样可以通过sysctl命令临时调整,或者写入/etc/sysctl.conf文件永久生效。
调优注意事项
虚拟内存调优没有通用的标准配置,需要结合业务场景调整。对于内存充足且对延迟敏感的服务,可以适当降低vm_swappiness,甚至禁用swap;对于内存较小且运行多个轻量服务的场景,可以保留默认的swap配置,避免进程因为内存不足被杀死。调整参数后需要持续监控系统的内存、swap使用情况和业务响应时间,验证调优效果。
Linux虚拟内存swap内存调优vm_swappiness修改时间:2026-07-09 00:54:12