如何在Linux中进行性能分析和调优

来源:网站建设作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《如何在Linux中进行性能分析和调优》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux中进行性能分析和调优》有用,将其分享出去将是对创作者最好的鼓励。

Linux系统性能分析和调优是保障服务稳定运行的核心技能,通过系统化的工具和方法,可以精准定位CPU、内存、磁盘、网络等维度的瓶颈,再针对性调整配置或优化代码,提升系统整体运行效率。

如何在Linux中进行性能分析和调优

常用性能分析工具介绍

Linux自带了大量原生性能分析工具,无需额外安装即可快速使用,以下是几款最常用的工具:

  • top:实时查看系统整体资源占用情况,支持按CPU、内存占用排序进程
  • vmstat:统计系统整体CPU、内存、磁盘、中断等核心指标,适合观察趋势变化
  • iostat:专注磁盘IO性能分析,可查看磁盘读写速率、利用率、等待时间
  • netstat/ss:分析网络连接状态、端口占用、收发数据包情况
  • perf:强大的性能剖析工具,可定位进程内函数级别的性能热点

核心性能指标解读

分析性能前需要先明确各维度的关键指标含义,避免误判瓶颈:

CPU相关指标

  • user:用户态CPU占用,即应用程序消耗的CPU时间占比
  • system:内核态CPU占用,即系统调用、内核任务消耗的CPU时间占比
  • idle:CPU空闲时间占比,该值过低说明CPU存在瓶颈
  • iowait:CPU等待磁盘IO的时间占比,该值过高说明磁盘IO存在瓶颈

内存相关指标

  • total:系统总内存大小
  • used:已使用的内存大小,包含应用程序占用和内核缓存
  • free:完全空闲的内存大小
  • buff/cache:用于磁盘缓存和缓冲区的内存,这部分内存可在需要时释放
  • available:实际可用的内存大小,比free更能反映真实可用内存情况

磁盘IO相关指标

  • r/s、w/s:每秒磁盘读、写请求次数
  • rkB/s、wkB/s:每秒磁盘读、写数据量,单位为KB
  • %util:磁盘利用率,该值接近100%说明磁盘处于满负载状态
  • await:IO请求平均等待时间,包含队列等待时间和实际处理时间

常见性能瓶颈定位步骤

遇到系统性能问题时,可按照以下通用步骤逐步排查:

第一步:查看整体资源占用

首先使用top命令查看系统整体CPU、内存占用情况,快速判断瓶颈方向:

# 运行top命令,按P键按CPU占用排序,按M键按内存占用排序
top
# 输出示例关键信息
# top - 10:30:00 up 5 days,  2:10,  1 user,  load average: 1.20, 1.05, 0.98
# Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
# %Cpu(s): 25.0 us, 10.0 sy,  0.0 ni, 60.0 id,  4.0 wa,  0.0 hi,  1.0 si,  0.0 st
# MiB Mem :  15892.0 total,   1024.0 free,   5120.0 used,   9748.0 buff/cache
# MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.  10240.0 avail Mem

如果看到iowait占比超过20%,优先排查磁盘IO问题;如果user+system占比超过80%,优先排查CPU问题;如果available内存过低,优先排查内存问题。

第二步:针对性深入分析

如果初步判断是CPU瓶颈,可使用vmstat观察CPU趋势,再用perf定位具体进程的热点函数:

# 每2秒输出一次vmstat统计结果,共输出5次
vmstat 2 5
# 输出示例
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
#  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
#  1  0      0 1048576 2097152 5242880    0    0    12    34  120  240 25 10 60  4  0
#  1  0      0 1046528 2097152 5242880    0    0     0    28  115  235 24 11 61  4  0

# 分析PID为1234的进程的性能热点,采样30秒
perf record -p 1234 -g -F 99 sleep 30
# 查看采样结果
perf report

如果是磁盘IO瓶颈,可使用iostat查看具体磁盘的IO情况:

# 每2秒输出一次磁盘IO统计,显示扩展信息
iostat -x 2
# 输出示例
# Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %util
# sda               1.20    3.40     24.80    136.00     0.00     0.50  15.00
# sdb              10.50    8.20    420.00    328.00     0.20     1.10  85.00

可以看到sdb磁盘的%util达到85%,说明该磁盘存在IO瓶颈,需要进一步查看该磁盘上运行的进程。

针对性调优方法

定位到具体瓶颈后,可采用对应的调优方案:

CPU性能调优

  • 如果是应用程序代码问题,优化热点函数逻辑,减少不必要的计算,比如避免循环内重复创建对象、减少冗余计算
  • 如果是进程数过多导致CPU调度压力大,调整进程优先级,使用nice命令降低非核心进程的优先级
  • 如果是中断占用过高,可调整中断亲和性,将中断绑定到特定CPU核心,避免中断集中在单个核心

调整进程优先级的示例:

# 将PID为1234的进程优先级调低,nice值范围-20到19,值越大优先级越低
renice 10 -p 1234

内存性能调优

  • 如果是应用程序内存泄漏,修复代码中的内存泄漏问题,及时释放不再使用的对象
  • 如果是系统缓存不足,可适当调整vm.swappiness参数,控制内存换页策略,减少不必要的swap使用
  • 如果是内存分配不合理,可调整应用程序的JVM堆大小、缓存配置等参数,避免内存过度占用

调整swappiness参数的示例:

# 临时将swappiness值设置为10,降低系统使用swap的倾向
sysctl vm.swappiness=10
# 永久生效可写入配置文件
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

磁盘IO性能调优

  • 如果是磁盘读写频繁,可优化应用程序的IO模式,比如合并小IO请求、使用异步IO、增加本地缓存减少磁盘访问
  • 如果是磁盘本身性能不足,可更换为SSD磁盘,或者对多块磁盘做RAID提升IO性能
  • 如果是文件系统问题,可调整文件系统挂载参数,比如使用noatime参数减少文件访问时间更新带来的IO开销

调整文件系统挂载参数的示例:

# 重新挂载/data分区,添加noatime参数
mount -o remount,noatime /data
# 永久生效可修改/etc/fstab文件,在对应分区挂载选项中添加noatime
# /dev/sdb1 /data ext4 defaults,noatime 0 0

网络性能调优

  • 如果是网络连接数过多,可调整内核网络参数,比如增加最大文件描述符限制、调整TCP连接队列大小
  • 如果是网络带宽不足,可升级网络带宽,或者优化应用程序的网络传输逻辑,比如压缩传输数据、减少不必要的网络请求
  • 如果是网络中断占用过高,可开启网卡多队列,将网络中断分散到多个CPU核心处理

调整TCP连接相关参数的示例:

# 临时调整TCP最大连接队列大小
sysctl net.core.somaxconn=2048
sysctl net.ipv4.tcp_max_syn_backlog=4096
# 永久生效写入/etc/sysctl.conf
echo "net.core.somaxconn=2048" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog=4096" >> /etc/sysctl.conf
sysctl -p

性能调优注意事项

性能调优需要遵循以下原则,避免调优带来新的问题:

  • 每次只调整一个参数,调整后进行性能测试,确认调优效果,避免多个参数同时调整无法定位有效优化项
  • 调优前做好配置备份,如果调优后出现异常可以快速回滚到原始配置
  • 优先优化应用程序本身的逻辑,系统层面的调优只是辅助手段,无法解决代码层面的根本性能问题
  • 性能调优需要结合业务场景,比如计算密集型业务优先保障CPU性能,存储密集型业务优先保障磁盘IO性能
性能分析和调优是一个持续的过程,系统运行过程中业务负载、数据量都会变化,需要定期巡检性能指标,及时发现潜在瓶颈并优化。

Linux性能分析性能调优top命令vmstat修改时间:2026-07-19 17:12:44

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