菜鸟科技网

Linux性能监控命令有哪些?

Linux性能监控是系统管理和运维中的核心任务,通过命令行工具可以高效获取系统资源使用情况、进程状态及性能瓶颈,以下从CPU、内存、磁盘、网络及综合监控五个维度,详细介绍常用命令及其使用方法。

Linux性能监控命令有哪些?-图1
(图片来源网络,侵删)

CPU性能监控

CPU是系统的核心,监控需关注使用率、负载、上下文切换及进程级占用情况。

top - 实时进程级监控

top以动态列表形式展示进程资源占用,默认按CPU使用率排序,常用参数:

  • -d:刷新间隔(如top -d 2每2秒刷新)。
  • -p:监控指定进程(如top -p 1234)。
  • -c:显示完整命令行而非仅进程名。
  • -b:批量输出模式,适合脚本处理(如top -b -n 5 > top.log)。

关键字段

  • %us(用户态CPU)、%sy(内核态CPU)、%id(空闲)、%wa(等待I/O)。
  • load average:1分钟/5分钟/15分钟系统负载,理想值应不超过CPU核心数。

vmstat - 虚拟内存统计(含CPU)

vmstat报告进程、内存、I/O、CPU等摘要信息,常用参数:

Linux性能监控命令有哪些?-图2
(图片来源网络,侵删)
  • 1:每秒刷新一次(如vmstat 1)。
  • -s:以统计表形式展示详细计数器。

关键字段

  • r:运行队列进程数(长期大于CPU核心数则负载过高)。
  • ussyidwa:同top的CPU指标。
  • cs:上下文切换次数,频繁切换可能意味着进程过多或CPU竞争。

mpstat - 多核CPU监控

mpstatsysstat工具包的一部分,可按核心拆分CPU使用率。

  • -P ALL:显示所有核心的CPU使用情况(如mpstat -P ALL 1)。
  • usrsysidle:各核心的用户态、内核态、空闲占比。

内存性能监控

内存监控需关注使用率、空闲/缓冲/缓存分布,以及进程内存占用。

free - 内存使用概览

free以易读格式显示内存总量、已用、空闲、缓冲/缓存等信息。

Linux性能监控命令有哪些?-图3
(图片来源网络,侵删)
  • -h:以人类可读格式显示(如free -h)。
  • -m:以MB为单位。

关键字段

  • total:总内存。
  • used:已用内存(包含内核缓冲/缓存)。
  • free:完全空闲内存。
  • buff/cache:缓冲(块设备缓存)和缓存(文件页缓存),可通过释放缓存临时释放内存(如echo 1 > /proc/sys/vm/drop_caches)。

smem - 精确内存占用统计

smem可区分物理内存(RSS)和虚拟内存(Swap),支持按进程/用户/命令分组。

  • -p:按进程排序(如smem -p)。
  • -k:以KB为单位显示。
  • USS(Unique Set Size):进程独占物理内存,比RSS更准确反映内存占用。

磁盘I/O监控

磁盘I/O瓶颈会导致系统响应缓慢,需关注吞吐量、I/O延迟及队列长度。

iostat - I/O设备统计

iostatsysstat工具包组件,可监控磁盘及CPU使用情况。

  • -d:仅显示磁盘I/O统计(如iostat -d 1)。
  • -x:扩展统计,包含关键指标:
    • %util:磁盘利用率(超过70%可能存在瓶颈)。
    • await:平均I/O等待时间(毫秒),过高意味着磁盘响应慢)。
    • r_await/w_await:读/写平均等待时间。

iotop - 实时I/O进程监控

iotop以类似top的界面实时显示各进程的I/O读写速度,需root权限。

  • -o:仅显示正在产生I/O的进程。
  • -p:监控指定进程。

dstat - 综合系统资源监控

dstat可同时监控CPU、内存、磁盘、网络等,支持自定义输出格式。

  • dstat -tdn:显示磁盘I/O、网络吞吐及时间(t时间、d磁盘、n网络)。

网络性能监控

网络监控需关注带宽使用、连接数、错误包及协议分布。

iftop - 实时带宽监控

iftop按主机/端口显示实时网络带宽使用情况,需root权限。

  • -i:指定网卡(如iftop -i eth0)。
  • -n:以数字形式显示主机名,避免DNS解析延迟。

nethogs - 进程级网络监控

nethogs按进程统计实时网络流量,可定位占用带宽的进程。

  • -d:刷新间隔(如nethogs -d 2)。
  • -c:刷新次数(如nethogs -c 5)。

ss/netstat - 网络连接状态

  • ss -tuln:显示TCP/UDP监听端口(-tTCP、-uUDP、-l仅监听、-n数字格式)。
  • ss -s:摘要统计(如TCP连接数、TIME_WAIT状态数)。

综合监控工具

glances - 全能系统监控

glances基于Python开发,整合CPU、内存、磁盘、网络、进程等信息,支持Web界面和告警。

  • -b:显示磁盘I/O条形图。
  • -m:显示内存使用情况。
  • -1:单行模式,适合远程查看。

sar - 系统活动历史报告

sarsysstat工具包的核心组件,可记录历史性能数据,用于长期分析。

  • -u:CPU使用率(如sar -u 5 10每5秒采样10次)。
  • -r:内存使用率(如sar -r)。
  • -b:I/O传输率(如sar -b)。

性能监控指标总结表

监控维度 核心命令 关键指标
CPU top/vmstat %us%sy%id%waload averagecs(上下文切换)
内存 free/smem usedfreebuff/cacheUSS(进程独占内存)
磁盘I/O iostat/iotop %utilawaitr_await/w_await、读写速度
网络 iftop/nethogs 带宽使用、进程级流量、连接数(ss -s
综合 glances/sar 整合CPU、内存、磁盘、网络指标,支持历史数据分析

相关问答FAQs

Q1:如何判断CPU是否过载?
A1:CPU过载可通过以下指标综合判断:

  1. 系统负载load average(1分钟/5分钟/15分钟)持续超过CPU核心数(如4核CPU负载>4)。
  2. CPU使用率topvmstat%us+%sy长期超过80%,且%id(空闲)低于20%。
  3. 上下文切换vmstatcs(上下文切换次数)频繁,如每秒超过10万次(需结合CPU核心数判断)。
  4. 运行队列vmstatr(运行队列进程数)长期大于CPU核心数,表示进程等待CPU时间过长。

Q2:如何定位内存泄漏的进程?
A2:定位内存泄漏进程的步骤如下:

  1. 对比内存占用:使用ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem查看进程内存占用,结合free -h观察总内存变化。
  2. 跟踪进程内存增长:通过watch -n 5 'ps -p <PID> -o rss,vsz'监控目标进程的RSS(物理内存)和VSZ(虚拟内存)是否持续增长。
  3. 使用smem分析:运行smem -p查看进程的USS(独占内存),若USS持续增长则可能存在泄漏。
  4. 检查内存分配:对于特定进程(如Java应用),可通过jmap -histo <PID>(Java)或valgrind工具分析内存分配情况。
分享:
扫描分享到社交APP
上一篇
下一篇