“服务器又卡了?”—— 快速排查性能瓶颈的N个命令
Linux的排查命令丰富而强大,是运维必须掌握的技能。请按照以下顺序,像侦探一样层层深入。
第1步:整体状态速览 - top / htop
命令: top
作用: 系统状态的“仪表盘”,一眼看清负载、CPU、内存、进程情况。
关键看什么:load average(系统平均负载):3个值分别代表1、5、15分钟的平均负载。理想情况是小于CPU核心数。如果持续高于核心数的70%,说明系统过载。
%Cpu(s):重点关注 us(用户态CPU) 和 sy(系统态CPU)。如果us过高,通常是应用代码问题;sy过高,可能是系统调用频繁或内核瓶颈。
RES 内存:查看哪个进程占用物理内存最多。
进阶版: htop(需要安装),界面更友好,支持鼠标操作和颜色高亮。
第2步:内存瓶颈排查 - free / vmstat
命令: free -h
作用: 快速查看内存和Swap使用情况。
关键看什么:如果 available 内存很少,同时 swap 的 used 值在不断增加,说明物理内存不足,系统正在频繁使用交换分区,这会极大拖慢性能。
第3步:I/O 瓶颈排查 - iostat / iotop
命令: iostat -dx 1
作用: 查看磁盘的读写速度和利用率。
关键看什么:
%util:设备的利用率。如果持续接近100%, 说明磁盘I/O已经成为瓶颈。
await:I/O请求的平均等待时间。这个值越大,说明磁盘越忙。
抓元凶: iotop(需要安装)可以像top一样,实时看到是哪个进程在进行大量I/O操作。
第4步:网络瓶颈排查 - sar / nethogs
命令: sar -n DEV 1
作用: 查看网络接口的吞吐量。
关键看什么:rxkB/s 和 txkB/s:查看各网卡的入站和出站流量,判断是否达到带宽上限。
抓元凶: nethogs(需要安装)可以查看每个进程的网络占用情况。
Linux 排查心法:top看全局 -> free看内存 -> iostat看磁盘 -> sar看网络,再用 htop/iotop/nethogs 定位具体进程。
Windows
对于Windows服务器,我们既可以利用强大的任务管理器,也可以使用命令行的PowerShell。
第1步:图形化利器 - 任务管理器 & 资源管理器
打开方式:Ctrl + Shift + Esc
作用: Windows版的“仪表盘”,非常直观。
关键看什么:“性能”标签页
CPU:查看使用率是否持续过高。
内存:查看“已提交”的内存是否接近“提交上限”。
磁盘:查看“活动时间”百分比,如果持续100%,说明磁盘I/O是瓶颈。
以太网:查看网络吞吐量。
“进程”标签页:排序找出消耗CPU、内存、磁盘最高的进程。
第2步:命令行神器 - PowerShell
命令1:Get-Counter
Get-Counter "\Processor(_Total)\% Processor Time" - 获取CPU总使用率。
Get-Counter "\Memory\Available MBytes" - 获取可用内存。
Get-Counter "\LogicalDisk(C:)\% Disk Time" - 获取C盘磁盘活动时间。
命令2:Resource Monitor (资源监视器)
在“运行”中输入 resmon,这是一个比任务管理器更强大的图形化工具,可以查看每个进程的磁盘、网络、句柄等详细活动。
Windows 排查心法:任务管理器快速定位 -> 资源监视器深入分析 -> PowerShell用于脚本化监控。
通用排查思路总结
无论什么系统,性能瓶颈无非来自四大金刚:CPU、内存、磁盘I/O、网络。
定位:使用全局监控工具(top/任务管理器/活动监视器)快速定位是哪个资源先达到瓶颈。
深挖:使用专项工具(iostat/资源监视器/osxtop)深入分析该资源的具体情况。
擒凶:使用进程级工具(iotop/nethogs/进程列表)找到导致问题的具体进程。
复盘:解决问题后,思考如何优化代码、调整配置、扩容硬件,避免问题重现。

TOP