当测试环境告警响起,或是线上接口响应突然变慢,面对Linux服务器的黑色终端,第一反应不应是盲目重启或猜测。高效的工程师依赖精准的诊断工具来为系统“号脉”。一个完整的Linux性能监测体系通常涵盖CPU、内存、磁盘I/O和网络四大核心模块,本文将梳理从基础到进阶的常用命令行工具,助你快速定位性能瓶颈。
CPU监测:定位高负载进程
CPU是系统的运算核心,其高使用率往往是系统卡顿的首要嫌疑。
常用工具:top 与 htop
top:最经典的实时系统监控工具,几乎所有发行版都预装。运行top命令,可以看到系统平均负载和各个进程的CPU、内存占用情况。按下大写的 P 键可以按CPU使用率对进程进行排序。
htop:可以看作是 top 的增强版,提供了更友好的交互界面。它支持鼠标操作,并以彩色进度条直观展示每个CPU核心的利用率,是许多运维和开发者的首选。
进阶工具:pidstat 与 mpstat
mpstat:对于多核服务器,mpstat 能详细报告每个CPU核心的状态。使用命令 mpstat -P ALL 1 可以每秒刷新一次所有CPU的统计数据,有助于排查某个核心软中断过高等不均衡问题。
pidstat:来自 sysstat 工具包。它可以更精细地监控特定进程的CPU消耗,并能区分用户态(%usr)和内核态(%system)的CPU使用比例,比 top 提供更深入的洞察。
内存监测:识别内存泄漏与Swap滥用
内存不足会导致系统频繁使用Swap交换分区,引发磁盘I/O飙升,从而使整体性能急剧下降。
常用工具:free
命令 free -h 可以快速查看系统内存使用概览。需要重点关注的不是“剩余内存”(free),因为Linux会利用空闲内存作为缓存(buff/cache)来提升性能。真正关键的是 可用内存(available)的数值,以及Swap分区是否被大量使用。
进阶工具:vmstat
vmstat(虚拟内存统计)提供更全面的视角。运行 vmstat 1 每秒输出一次报告。其中 si(内存换入)和 so(内存换出)两列至关重要。如果它们的值长时间不为0,表明物理内存已耗尽,系统正在与Swap分区进行频繁的数据交换,这是内存瓶颈的明确信号。
磁盘I/O:揪出拖慢系统的读写操作
当应用逻辑和CPU看起来都正常,但响应依旧缓慢时,磁盘I/O很可能就是性能杀手。
常用工具:iostat
iostat -x 1 命令可以展示扩展的磁盘I/O统计信息。需要重点关注 %util 列,它表示设备的繁忙百分比。如果该值持续接近100%,表明磁盘I/O已饱和。此外,await 列(I/O请求的平均等待时间)数值过高,也直接反映了磁盘响应缓慢。
进阶工具:iotop
iostat 告诉我们磁盘很忙,而 iotop 则能揭示“谁”在忙。它的界面类似于 top,但专门用于实时显示每个进程的磁盘读写速率。使用 iotop -o 参数可以只显示正在进行I/O操作的进程,快速定位到疯狂写日志或进行大量数据读写的“元凶”。
网络监测:排查连通性与带宽瓶颈
对于分布式系统和网络服务,网络状态监控是运维 & 测试的日常基础。
常用工具:ping 与 ss
ping:用于测试网络连通性和延迟的基本工具。
ss:现代且高效的netstat替代品,用于查看套接字统计信息。命令 ss -ntlp 能快速列出所有TCP连接和监听端口,在排查大量并发连接时比netstat速度更快,是分析网络/系统连接状态的利器。
进阶工具:iftop 与 tcpdump
iftop:用于实时监控本机与外部主机之间的网络带宽使用情况,可以直观地看到哪个连接或IP地址占用了大量流量。
tcpdump:网络问题深度排查的终极工具。通过抓取和分析网络数据包,可以诊断复杂的网络问题,如握手失败、异常丢包等,是掌握网络/系统底层真相的关键。
综合工具:“瑞士军刀”式的全能监控
如果觉得单独使用多个工具不够便捷,可以考虑以下综合性监控方案。
dstat
dstat 能够将CPU、磁盘、网络、内存等多种指标整合在一个界面中,以彩色列的形式实时刷新输出。它非常适合进行跨资源类型的关联性分析,例如观察网络流量激增是否同步引发了CPU或磁盘I/O的波动。
glances
这是一个基于Python开发的跨平台系统监控工具。它试图在一个终端屏幕内集中展示系统的全方位信息,包括CPU、内存、负载、磁盘I/O、网络流量,甚至传感器温度。glances 会使用绿色、黄色、红色来高亮显示潜在的性能瓶颈,如果你希望只安装一个工具来获得整体概览,它是一个不错的选择。其运行界面通过紧凑的布局和颜色编码,将关键指标一目了然地呈现出来。
总结与实践路线图
Linux性能调优是一门实践的艺术,熟悉工具是第一步。面对故障,可以遵循以下清晰路径:
- CPU过高:先用
top 或 htop 定位高负载进程,再用 pidstat 分析该进程的详细CPU使用情况。
- 内存不足:用
free -h 查看整体内存和Swap使用,用 vmstat 1 关注 si/so 确认是否存在频繁交换。
- I/O缓慢:用
iostat -x 1 确认磁盘利用率(%util)和延迟(await),用 iotop -o 找出导致高I/O的进程。
- 网络问题:用
ss 查看连接状态,用 iftop 分析流量,复杂问题则用 tcpdump 抓包深究。
掌握这些工具,意味着你拥有了从系统表象直抵问题根源的能力。无论是为了维护数据库/中间件/技术栈的稳定,还是保障整体服务的运维 & 测试质量,这套“工具箱”都能让你在应对性能危机时更加从容。
参考资料
[1] 服务器又双叒卡了?Linux 性能监测“全家桶”请查收!, 微信公众号:mp.weixin.qq.com/s/WgXGEDCzu-ENlfCReeeJ7Q
版权声明:本文由 云栈社区 整理发布,版权归原作者所有。