Linux 性能分析
在日常使用 Linux 开发或者运维服务器的过程中,你可能会遇到程序运行缓慢、CPU 飙升、内存泄漏、磁盘读写瓶颈等性能问题。为了定位和解决这些问题,你需要学会一项非常关键的技能 —— 性能分析。
这篇教程会带你了解:
什么是性能分析?
性能分析(Performance Analysis),就是对系统或程序的运行状况进行监控、统计和分析,以找出影响性能的瓶颈点。
在 Linux 中,性能问题主要涉及以下几个方面:
- CPU 占用率:程序是不是计算密集型?是否存在死循环?
- 内存使用情况:是否内存泄漏?是否频繁触发换页?
- 磁盘 I/O:是否因为读写磁盘太慢导致性能下降?
- 网络延迟或带宽瓶颈:网络请求是否阻塞?
- 系统调用频率与效率:程序是否频繁调用高开销的系统调用?
你需要根据问题的症状,结合工具来定位。
CPU 相关分析
top 和 htop
top是最常用的实时系统监控工具,默认显示 CPU、内存、负载等信息。- 你可以观察
%CPU高的进程,找出是否是单个进程过度占用。
top
mpstat(来自 sysstat 包)
它可以显示所有 CPU 核心的使用率,适用于多核服务器。
mpstat -P ALL 1
perf(强大的分析工具)
它可以分析程序在 CPU 上运行的性能热点(如函数耗时)。
perf record ./your_program
perf report
你会看到哪些函数占用 CPU 最多,适合优化。
内存相关分析
free
可以查看当前系统的内存使用情况(总内存、已用、剩余、缓存等):
free -m
vmstat
显示内存、CPU、I/O、进程切换等综合信息:
vmstat 1
其中 si/so 表示交换分区使用,bi/bo 表示磁盘读写,适合发现内存压力和系统负载问题。
valgrind(内存泄漏检测)
可用于分析 C/C++ 程序的内存问题:
valgrind --leak-check=full ./your_program
磁盘 I/O 分析
iostat(来自 sysstat 包)
用于分析磁盘 I/O 活动,判断是否存在磁盘瓶颈:
iostat -dx 1
重点关注 %util(设备利用率)和 await(平均等待时间)。
iotop
实时显示哪个进程在读写磁盘:
sudo iotop
如果一个进程持续大量读写,会影响整体系统性能。
网络相关分析
ss 或 netstat
查看网络连接状态:
ss -tnlp
iftop
类似 top,但是用于网络流量:
sudo iftop
可以发现哪些 IP 或端口占用了大量带宽。
tcpdump
抓包工具,可用于分析通信协议和异常网络行为:
sudo tcpdump -i eth0 port 80
系统调用分析
strace
跟踪程序运行过程中执行的系统调用:
strace ./your_program
你可以看到程序打开了哪些文件、调用了哪些函数,是否有 I/O 阻塞、资源不存在等问题。
其他高级工具
sar:收集系统资源使用情况,可用于历史数据分析;systemtap:内核级别的性能分析工具;bpftrace/bcc:基于 eBPF 的性能分析新技术,功能强大但较为复杂。
小结
通过本文,你了解了 Linux 性能分析的基础概念和常见工具:
- 分析性能时应从 CPU、内存、磁盘 I/O、网络四个方面入手;
- 使用工具如
top、vmstat、perf、iostat、strace等进行排查; - 根据不同问题症状选择合适的工具分析;
- 找出瓶颈后进一步优化代码或系统配置。
性能分析是开发和运维中必不可少的技能,建议你平时就养成监控系统状态的习惯,提升故障排查效率。

GetIoT.tech 创始人,独立开发者,Linux 重度用户,开源软件作者,创业者,INTJ