如何调优和优化Linux系统中的虚拟内存使用

来源:建站技术作者:深圳程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何调优和优化Linux系统中的虚拟内存使用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何调优和优化Linux系统中的虚拟内存使用》有用,将其分享出去将是对创作者最好的鼓励。

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

如何调优和优化Linux系统中的虚拟内存使用

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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。