在 Linux 系统运维和开发过程中,性能调优是一项必备技能。无论是应对高并发、排查系统响应慢,还是分析资源瓶颈,熟练掌握性能分析命令都能让你事半功倍。本文系统梳理 Linux 下常用的性能调优命令,涵盖整体负载、CPU、内存、磁盘 I/O、网络以及综合工具,帮助大家快速定位问题。

一、整体性能查看

1. uptime – 快速看负载

uptime 显示系统已运行时间、当前登录用户数以及系统负载平均值(1 分钟、5 分钟、15 分钟)。负载值表示处于可运行/不可中断状态的进程数,通常以 CPU 核心数为阈值评估是否过载。

$ uptime
 14:32:15 up 10 days,  3:21,  2 users,  load average: 0.08, 0.03, 0.01
  • load average 长期超过 CPU 逻辑核心数的 0.7,可能需要关注。

2. top / htop – 实时进程监控

top 是最经典的实时监控工具,显示 CPU、内存、进程排名。按 P 按 CPU 排序,按 M 按内存排序,按 1 展开每个 CPU 核心的使用率。

$ top
us:用户态 CPU

sy:内核态 CPU

id:空闲 CPU

wa:等待 I/O 的 CPU

htoptop 的增强版,支持鼠标、颜色高亮、横向/纵向滚动,需要额外安装。

# 安装 htop (CentOS/Ubuntu)
$ yum install htop -y   # or apt install htop
$ htop

二、CPU 性能分析

1. mpstat – 多核 CPU 统计

mpstat 来自 sysstat 包,输出每个 CPU 核心或整体 CPU 的使用率,能清晰看到各核心压力是否均衡。

# 每 2 秒显示一次所有 CPU 核心数据,共输出 3 次
$ mpstat -P ALL 2 3
  • %usr%sys%iowait%irq%soft 等字段有助于判断用户程序、系统调用或 I/O 等待导致的 CPU 瓶颈。

2. pidstat – 按进程查看 CPU

同样来自 sysstatpidstat 可以针对每个进程报告 CPU、内存、I/O 统计信息,是定位“哪个进程导致负载高”的利器。

# 查看所有进程的 CPU 使用情况(每隔 1 秒,共 3 次)
$ pidstat 1 3
​
# 查看特定进程 (PID 1234) 的详细统计
$ pidstat -p 1234 1

3. perf – 全面的 CPU 剖析

perf 是内核自带的性能剖析工具,能够采集 CPU 硬件事件(如时钟周期、缓存未命中、分支预测失败等),适合深入分析热点函数。

# 统计 10 秒内的 CPU 周期事件
$ perf stat -e cpu-clock -a sleep 10
​
# 记录 CPU 采样数据 (按 Ctrl+C 停止)
$ perf record -a -g sleep 30
$ perf report

实践中常用 perf top 实时查看当前系统中占用 CPU 最多的函数。

三、内存性能分析

1. free – 内存使用概览

free 显示物理内存和交换分区的总量、已用、空闲、缓冲区/缓存等信息。-h 选项以人类可读单位显示。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        1.2G        5.8G        123M        632M        6.0G
Swap:          2.0G        0.0B        2.0G
  • available 列是估算的可用于启动新进程的内存(不包括 swap),比 free 列更有参考价值。

2. vmstat – 虚拟内存统计

vmstat 报告进程、内存、分页、块 I/O、陷阱以及 CPU 活动。常用采样模式:

$ vmstat 2 5   # 每 2 秒一次,共 5 次

重要字段:

  • si / so:从磁盘交换入/出的内存量(若持续大于 0 说明物理内存不足)

  • bi / bo:块设备读/写的块数

  • cs:上下文切换次数(过高可能意味着锁竞争或线程过多)

  • in:中断次数

  • r / b:运行队列中的进程数 / 处于不可中断睡眠的进程数

四、磁盘 I/O 性能分析

1. iostat – 块设备负载

iostatsysstat 包的核心工具之一,报告磁盘的吞吐量、I/O 次数、平均等待时间等。

# 每 2 秒刷新,显示扩展统计(包括 avgqu-sz、await、%util)
$ iostat -x 2

关键列说明:

  • %util:设备忙的百分比(接近 100% 说明磁盘已达到饱和)

  • await:平均每次 I/O 请求的等待时间(包括排队和服务时间,过高表示磁盘慢或忙)

  • r/sw/s:每秒读/写请求次数

  • rkB/swkB/s:每秒读/写数据量

2. iotop – 按进程查看 I/O

iotop 类似 top,但专注于磁盘 I/O 活动,可显示每个进程的读写速率。需 root 权限。

$ sudo iotop -o   # 只显示有 I/O 活动的进程

五、网络性能分析

1. netstat – 网络连接与接口统计

虽然部分发行版已逐渐弃用,但 netstat 依然广泛用于显示路由表、网络连接、接口统计等。常用组合:

# 显示所有 TCP 连接,不解析服务名(更快)
$ netstat -antp
​
# 查看网络接口统计信息
$ netstat -i
  • -t:TCP,-u:UDP,-l:监听端口,-p:显示进程 PID/名称。

2. ss – 更高效的 socket 统计

ssnetstat 的替代者,解析速度更快,输出信息更详细。

# 列出所有 ESTABLISHED 状态的 TCP 连接
$ ss -t state established

# 显示所有监听端口及其进程
$ ss -tlnp

3. sar – 历史性能数据收集

sar 同样是 sysstat 的核心组件,可以记录和回放历史性能数据(CPU、内存、网络、I/O 等),是回溯问题的王牌工具。

# 查看今天的网络设备统计 (每10分钟采样一次)
$ sar -n DEV
​
# 查看历史数据 (指定某天的数据文件)
$ sar -f /var/log/sa/sa17 -u

4. tcpdump – 抓包分析

当怀疑网络层面存在重传、延迟、丢包时,tcpdump 配合 Wireshark 可精确定位。

# 抓取 eth0 接口的 80 端口流量,保存为 pcap 文件
$ sudo tcpdump -i eth0 port 80 -w http.pcap

六、综合性能监控工具

dstat – 多维度实时统计

dstat 融合了 vmstatiostatnetstat 等工具的功能,并用彩色表格在同一界面展示 CPU、磁盘、网络、分页等数据。

$ dstat -c -d -n -m -l 2
  • -c:CPU,-d:磁盘,-n:网络,-m:内存,-l:负载。

glances – 跨平台 Web 监控

glances 使用 psutil 库收集系统信息,支持终端 UI、Web 界面和 API 输出,对大规模运维非常友好。

$ glances
# 开启 Web 服务模式
$ glances -w

七、调整优先级与资源限制

性能调优不仅是“观察”,有时还需要主动干预。

nice / renice – 调整进程优先级

nice 指定进程的初始优先级(-20 最高,19 最低),renice 改变运行中进程的优先级。

# 以低优先级运行备份脚本
$ nice -n 19 ./backup.sh
​
# 将 PID 1234 的优先级调整为 -5(需要 root)
$ sudo renice -n -5 -p 1234

ulimit – 限制进程资源

ulimit 可控制 Shell 启动进程所能使用的文件句柄数、栈大小、核心转储等。对于高并发服务器,需要调高 nofile(打开文件数限制)。

$ ulimit -n 65535   # 设置当前会话文件描述符上限
# 永久修改需要编辑 /etc/security/limits.conf

taskset – 绑定 CPU 核心

将关键进程绑定到特定 CPU 核心,可以避免缓存抖动并提高性能。

# 把 PID 5678 绑定到 CPU 核心 0 和 2 上
$ taskset -pc 0,2 5678

八、常用性能调优思路与总结

  1. 从顶向下:先用 top / uptime / free -h / dstat 看整体,识别瓶颈类型(CPU、内存、I/O 还是网络)。

  2. 深入细节

    • CPU 高 → pidstat / perf top 定位进程或线程;

    • 内存不足 → vmstat 检查 swap,smem 查看 PSS;

    • 磁盘 I/O 高 → iostat -x%utilawaitiotop 找进程;

    • 网络问题 → ss / ifconfig 看丢包,tcpdump 分析重传。

  3. 保留历史数据:部署 sysstat 定时任务,用 sar 回溯问题时间点。

  4. 主动调优:利用 niceulimittaskset 控制资源分配,调整内核参数(/etc/sysctl.conf)。

最后提醒:性能调优不是盲目执行命令,而是基于数据分析假设、验证、迭代。建议在多测试环境下先验证变更的影响。

以上命令覆盖了 Linux 性能调优的绝大部分场景,掌握它们,你就能从容应对各种性能挑战。如果你有更具体的场景(如数据库、Java 应用),还可以配合相应生态工具(如 perf + FlameGraphbcc 动态追踪)进一步分析。

收藏本文,随时查阅,也欢迎在评论区交流你的调优经验!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐