目录一、引言性能排查的思维框架二、系统全局快速浏览硬件与资源概况2.1 nproc 和 lscpu看清CPU家底2.2 free内存概况三、vmstat系统整体负载四、iostat磁盘I/O深度分析五、mpstat 和 pidstatCPU问题定位5.1 mpstat查看每个CPU核心的使用率5.2 pidstat查看每个进程的CPU和I/O六、网络性能监控6.1 查看网络吞吐量6.2 sar历史性能数据回溯七、dstat全能的监控仪表盘八、综合实战性能诊断的标准套路九、工具速查表十、本篇小结与阶段总结本篇核心第二阶段总结动手练习十一、下篇预告一、引言性能排查的思维框架“服务器响应变慢了”——这是一道开放题。可能的原因有CPU在拼命计算CPU瓶颈内存不够疯狂换页内存瓶颈磁盘读写不过来I/O瓶颈网络带宽被打满网络瓶颈面对这种情况最忌讳的是“凭直觉乱猜”。猜错了方向可能折腾半天换内存、升级CPU最后发现是日志文件把磁盘写满了。性能排查有一条黄金法则先用宏观工具看整体找到异常指标再深入该子系统分析。text系统整体负载 → CPU → 内存 → 磁盘I/O → 网络本篇按这个顺序逐一展开。二、系统全局快速浏览硬件与资源概况2.1 nproc 和 lscpu看清CPU家底接到告警先弄清机器的“硬实力”否则80%的CPU使用率在2核和32核机器上完全不是一个概念。bash# 查看CPU核心数物理核 逻辑核 nproc # 查看CPU详细信息型号、频率、缓存、NUMA拓扑 lscpulscpu关键字段Model nameCPU型号区分云服务器虚拟化CPU和物理机CPU(s)逻辑CPU总数包括超线程Thread(s) per core每核线程数1无超线程2开了超线程NUMA node(s)NUMA节点数多路服务器的内存亲和性参考2.2 free内存概况bashfree -h输出解读texttotal used free shared buff/cache available Mem: 7.7G 2.3G 1.2G 450M 4.2G 4.8G Swap: 2.0G 512M 1.5G关键认知——不要把free列当“剩余内存”free完全未被使用的内存buff/cache系统用来缓存文件的内存可以随时释放给应用使用available应用程序真正可用的内存free 大部分buff/cache判断内存是否够用看available列不是free列。Linux的哲学是“空着的内存是浪费”它会积极用空闲内存做缓存加速I/O。Swap使用少量Swap被使用几百MB是正常的大量Swap被使用 高换页活动 内存严重不足性能会急剧下降三、vmstat系统整体负载vmstatVirtual Memory Statistics一次性展示CPU、内存、I/O、系统整体的概览是排查问题的第一站。bash# 每2秒输出一次输出5次 vmstat 2 5输出示例textprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 524288 125000 210000 4300000 0 1 12 25 120 300 5 2 88 5 0 3 1 524288 124000 210000 4300000 0 0 150 350 450 800 15 5 60 20 0字段分组解读类别字段含义异常判定进程r运行队列长度等待CPU的进程数持续 CPU核心数 CPU瓶颈进程b不可中断睡眠的进程数等待I/O持续 0 I/O瓶颈内存swpd已使用的SwapKB持续增长 内存不足内存free/buff/cache内存分布buff/cache高是正常的Swapsi从Swap读入内存的速率KB/s 0 说明有换页活动持续高 内存不足Swapso写出到Swap的速率KB/s 0 持续高 严重内存不足I/Obi从块设备读入的速率KB/s突然飙升 I/O密集操作I/Obo写出到块设备的速率KB/s突然飙升 I/O密集操作系统in每秒中断数突然极高 硬件/驱动异常系统cs每秒上下文切换数极高 高CPU 大量线程/进程争抢CPUus用户态CPU时间%高 应用程序在消耗CPUCPUsy内核态CPU时间%高 系统调用/I/O操作频繁CPUid空闲时间%—CPUwa等待I/O的时间%持续 10% I/O瓶颈黄金诊断组合r列高 us高 → CPU计算瓶颈应用程序在拼命算r列不高 wa高 → I/O瓶颈CPU在等磁盘b列有值 → 确认I/O瓶颈进程卡在D状态si/so持续 0 → 内存不足已开始换页四、iostat磁盘I/O深度分析当vmstat发现wa高或bi/bo大时用iostat进一步确认是哪块磁盘、什么原因。bash# 安装sysstat包 sudo apt install sysstat -y # Ubuntu/Debian sudo dnf install sysstat -y # CentOS/RHEL # 每2秒输出一次显示扩展统计 iostat -x 2关键字段字段含义异常判定r/sw/s每秒读写请求数IOPS接近磁盘IOPS上限即瓶颈rkB/swkB/s每秒读写数据量吞吐量接近磁盘或带宽上限即瓶颈await平均每次I/O请求的等待时间msHDD 20ms 或 SSD 5ms 值得关注svctm平均每次I/O的服务时间ms已废弃不要参考%util设备繁忙度接近100% 磁盘饱和HDD参考SSD可超100IOPS vs 吞吐量随机读写数据库场景→ 关注r/s、w/sIOPS顺序读写日志、视频文件→ 关注rkB/s、wkB/s吞吐量一个诊断建议先用iostat -x 1看await和%util。如果await持续较高HDD 20msSSD 5ms说明磁盘响应变慢再结合r/s和w/s判断是随机读写过多还是设备性能不足。五、mpstat 和 pidstatCPU问题定位5.1 mpstat查看每个CPU核心的使用率当top显示CPU使用率高时mpstat告诉你各核心负载是否均衡——有时候是单个核心被打满其他核心闲着。bash# 每2秒输出所有CPU核心的统计 mpstat -P ALL 2关注点各核心的%usr和%sys是否均衡如果某一核心的%soft软中断极高可能是网卡中断处理全压在一个核上5.2 pidstat查看每个进程的CPU和I/Obash# 查看进程的CPU使用情况每秒刷新 pidstat 1 # 查看进程的I/O情况 pidstat -d 1pidstat -d会显示每个进程的读写速率是定位“哪个进程在疯狂读写磁盘”的直接手段。六、网络性能监控6.1 查看网络吞吐量bash# 查看网卡统计累计值 ip -s link show eth0 # 实时查看网卡流量需要nload sudo apt install nload nload eth06.2 sar历史性能数据回溯sar是排查“刚才发生了什么”的神器它是sysstat包的一部分。bash# 查看今天的CPU使用历史每10分钟的采样点 sar # 查看今天的内存使用历史 sar -r # 查看今天的磁盘I/O历史 sar -b # 查看今天某个时间段的记录 sar -s 10:00:00 -e 11:00:00sar的数据由定时采集脚本/etc/cron.d/sysstat写入日志即使事故当时你不在电脑前事后也能回溯分析。七、dstat全能的监控仪表盘dstat整合了vmstat、iostat、netstat的功能在一个界面中同时展示多维度数据。bash# 安装 sudo apt install dstat -y sudo dnf install dstat -y # 基本使用默认显示CPU、磁盘、网络、分页、系统 dstat # 显示更多含CPU、磁盘、网络、内存、进程统计 dstat -cdngy输出示例text--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai stl| read writ| recv send| in out | int csw 5 2 88 5 0| 12k 25k| 0 0 | 0 0 | 120 300常用组合dstat -cdngy 2——每2秒刷新含CPU、磁盘、网络、内存、系统统计。对比前面的分段工具dstat的优势是实时、全面、一个窗口看完所有维度。但它没有历史记录功能不如sar适合事后追溯。八、综合实战性能诊断的标准套路当收到“服务器好慢”的告警时按以下流程逐层排查第一步快速确认全局状态bashuptime # 看系统负载和运行时长 free -h # 看内存概况 df -h # 确认磁盘空间满了什么都慢 vmstat 2 5 # 关注r、b、wa、si/so列第二步根据vmstat的判断选择深入方向textr值持续 CPU核心数 → CPU瓶颈 → 步骤A b值 0 或 wa 10% → I/O瓶颈 → 步骤B si/so持续 0 → 内存瓶颈 → 步骤C步骤ACPU瓶颈排查bashtop # 按P排找出吃得最狠的进程 mpstat -P ALL 2 # 看所有CPU核心负载分布 pidstat 1 # 看各进程CPU使用率变化步骤BI/O瓶颈排查bashiostat -x 2 # 确认哪块磁盘await高 pidstat -d 1 # 揪出在疯狂读写的进程 # 如果是日志疯狂写入 → 检查logrotate是否失效 # 如果是数据库 → 检查慢查询步骤C内存瓶颈排查bashfree -h # 确认available是否接近零 ps aux --sort-%mem | head -10 # 找出内存大户 # 检查是否有进程的内存持续增长 → 内存泄漏 # 检查是否有大量子进程 → 调整并发数或worker数第三步如果CPU、I/O、内存都正常检查网络bashss -s # Socket统计 ip -s link show eth0 # 看是否有大量错误包或丢包 ping -c 10 网关IP # 看是否存在网络抖动第四步如果当前一切正常查历史bashsar -s 事发时间-30分钟 -e 事发时间30分钟 # 回溯事发时段的CPU、内存、I/O趋势九、工具速查表工具核心用途标志性用法uptime系统负载和运行时长uptimelscpuCPU硬件信息lscpunprocCPU核心数nprocfree -h内存概况free -hvmstat系统整体负载含I/O、Swapvmstat 2 5iostat磁盘I/O深度分析iostat -x 2mpstat每核CPU使用率mpstat -P ALL 2pidstat进程级CPU和I/Opidstat 1sar历史性能数据回溯sar -s 10:00 -e 11:00dstat全维度实时监控dstat -cdngy 2十、本篇小结与阶段总结本篇核心性能诊断不是玄学而是基于指标的结构化分析先用vmstat看全局r/b/wa/si/so五列锁定问题方向再根据方向用专用工具深入CPU用mpstat/pidstatI/O用iostat内存用free和ps事后分析用sar回溯历史趋势发现无法复现的问题实时综合监控用dstat一个窗口看所有维度第二阶段总结至此Linux从入门到精通第二阶段核心机制与系统管理全部完成。回顾一下我们走过了什么篇目主题核心技能11进程管理ps、top、进程状态12进程控制前后台切换、kill信号、nohup/screen13磁盘管理df/du、lsblk、mount、fstab14引导流程BIOS→GRUB→Kernel→systemd单用户模式15systemdsystemctl管理服务编写.service文件16计划任务crontab、at、logrotate17日志系统journalctl、/var/log、内核报错18网络配置ip、ping、traceroute、ss19SSH进阶密钥登录、~/.ssh/config、scp/sftp20性能监控vmstat/iostat/pidstat诊断套路你现在已经具备了系统管理员的核心能力。但成为真正的Linux高手还需要一项关键技能Shell脚本编程——用程序化的方式将前面所学的所有命令组合成自动化方案。动手练习bash# 1. 用时3分钟做一次完整的系统体检 echo 时间 date echo 运行时长和负载 uptime echo CPU信息 nproc echo 内存概况 free -h echo 磁盘空间 df -h / echo 系统整体负载 (只取1次) vmstat 1 1 | tail -1 echo 磁盘I/O (只取1次) iostat -x 1 1 | grep -v ^$ echo 网络监听端口 ss -tlnp echo 内存占用Top5 ps aux --sort-%mem | head -6 # 2. 用dstat做一次持续1分钟的监控每5秒一次 dstat -cdngy 5 12十一、下篇预告第三阶段我们将开启Shell脚本编程——从入门到自动化。下一篇《Shell脚本开篇——什么是Shell写第一个Hello World》将带你理解Shell的本质学习Shebang的作用、脚本的执行方式、变量的定义与引用。从“敲命令”到“写脚本”这是自动化能力的第一个台阶。延伸思考上面的系统体检命令集每次都要逐条执行很麻烦。如果把它们封装成一个文件执行一次就自动输出所有结果该多方便这就是Shell脚本的意义——让命令的组合可复用、可分享、可调度。下一篇见。