Linux资源监控工具集

TOC

pidstat工具

pidstat是Linux下一个非常实用的 进程级性能监控工具,能实时显示各进程的CPU、内存、I/O、线程、上下文切换等详细性能指标。

pidstat安装

作为Linux外部的命令工具,可能需要安装,安装方法如下:
Debian / Ubuntu

apt -y install sysstat

RedHat / CentOS

yum -y install sysstat

补充说明:安装完成后会包含:pidstatiostatmpstatsar 等命令。

pidstat使用

pidstat使用语法:

pidstat 选项 间隔秒数 次数

补充说明:如果不加次数参数默认会一直进行实时监测数据,跟ping命令一样。

【示例1】每隔2秒刷新一次,共显示2次

pidstat 2 2

查看结果如下图所示:
linux-advanced.012
该工具能够查看CPU、内存、磁盘I/O等资源。使用-u选项查看每个进程的CPU资源(默认),使用-r查看内存使用情况,使用-d查看磁盘I/O统计信息。
【示例2】查看CPU使用率

pidstat -u 2 2

【示例3】查看内存使用情况

pidstat -r 2 2

【示例4】查看磁盘I/O统计信息

pidstat -d 2 2

【示例5】查看综合信息(CPU + 内存 + I/O)

pidstat -urd 1 1

以示例5为例,查看结果如下图所示:
linux-advanced.013

pidstat常用输出字段说明

1.通用字段(适用所有统计类型)

  • PID:进程 ID(唯一标识进程)
  • UID:进程所属用户的 ID
  • USER:进程所属用户名
  • Command:进程名称或执行命令
  • TGID:线程组 ID(通常是主线程的 PID)
  • TID:线程 ID(在线程模式下使用 -t 时显示)

2.CPU统计字段

  • %usr:用户空间中 CPU 使用率
  • %system:内核空间中 CPU 使用率
  • %guest:运行虚拟机时的 CPU 使用率
  • %wait:进程等待 I/O 完成所占 CPU 时间比例
  • %CPU:进程总的 CPU 使用率(等于 %usr + %system + %guest)
  • CPU:该进程运行所在的 CPU 编号

3.内存统计字段

  • minflt/s:每秒次要(软)缺页数(不从磁盘加载)
  • majflt/s:每秒主要(硬)缺页数(需要从磁盘加载)
  • VSZ:进程占用的虚拟内存大小(KB)
  • RSS:进程实际占用的物理内存大小(KB)
  • %MEM:进程占用物理内存的百分比

4.磁盘I/O统计字段

  • kB_rd/s:每秒从磁盘读取的数据量(KB/s)
  • kB_wr/s:每秒写入磁盘的数据量(KB/s)
  • kB_ccwr/s:每秒由进程取消写入的页缓存数据量(KB/s)
  • iodelay:进程因 I/O 等待所导致的延迟时间

5.网络统计字段

  • rxkB/s:进程每秒接收的数据量(KB/s)
  • txkB/s:进程每秒发送的数据量(KB/s)

pidstat命令常用选项

选项 含义
-u 显示每个进程的 CPU 使用率(默认)
-r 显示内存使用情况
-d 显示磁盘 I/O 统计信息
-w 显示任务上下文切换情况
-t 显示线程(task)级别统计信息
-p 仅显示指定 PID 的信息
-G 按进程名过滤(部分系统支持)
-h 可读性更好的输出格式(human readable)
-l 显示完整命令行(不截断)
-T <ALL/TASK> 指定统计维度(进程或线程)
-V 显示版本信息
-H 不合并线程,单独显示每个线程(thread)
-C 按命令名过滤输出
-e 监控特定性能事件(如硬件计数器)
-U 显示指定用户的进程

dstat工具

dstat是一个非常实用的系统性能实时监控工具,它可以综合展示 CPU、内存、磁盘、网络、IO等多种资源的动态使用情况,常用于替代vmstatiostatnetstatifstat等命令的组合。

dstat安装

作为Linux外部的命令工具,可能需要安装,安装方法如下:
Debian / Ubuntu

apt -y install dstat

RedHat / CentOS

yum -y install dstat

dstat使用

dstat使用语法:

dstat 选项 间隔秒数 次数

补充说明:如果不加次数参数默认会一直进行实时监测数据,跟ping命令一样。

【示例1】查看总体资源使用情况,每1秒刷新1次,显示3次

dstat 1 3

【示例2】查看CPU使用情况,每1秒刷新1次,显示3次

dstat -c 1 3

【示例3】查看内存使用情况,每1秒刷新1次,显示3次

dstat -m 1 3

【示例4】查看磁盘I/O使用情况,每1秒刷新1次,显示3次

dstat -d 1 3

【示例5】查看网络使用情况,每1秒刷新1次,显示3次

dstat -n 1 3

上面所有示例的查看结果如下图所示:
linux-advanced.014

dstat常用输出字段说明

1.系统字段

  • int:每秒中断(interrupt)次数
  • csw:每秒上下文切换(context switch)次数
  • fork:每秒创建的进程/线程数(某些版本插件支持)

2.CPU统计字段

  • usr:用户态(user space)CPU 使用率
  • sys:内核态(system space)CPU 使用率
  • idl:CPU 空闲时间百分比(idle)
  • wai:CPU 等待 I/O 的时间百分比(I/O wait)
  • hiq:硬中断(hardware interrupts)占用 CPU 的时间百分比
  • siq:软中断(software interrupts)占用 CPU 的时间百分比
  • stl:被虚拟机“偷取”的 CPU 时间(stolen time,用于虚拟化环境)

3.内存统计字段

  • used:当前使用的物理内存量(KB)
  • buff:被内核缓冲区(buffer cache)占用的内存量
  • cach:被页面缓存(page cache)占用的内存量
  • free:空闲内存量(KB)

4.磁盘统计字段

  • read:每秒读取的数据量(单位:KB/s)
  • writ:每秒写入的数据量(单位:KB/s)
  • avrd / avwr(部分插件):
    • 平均读/写速率
    • 某些系统或插件扩展会显示更详细的 per-device 数据(如 dstat -D sda,sdb)

5.磁盘I/O统计字段

  • read:每秒块设备读取请求数
  • writ:每秒块设备写入请求数
  • list:每秒合并请求数(表示调度器优化情况)

5.网络统计字段

  • recv:每秒接收数据量(单位:KB/s)
  • send:每秒发送数据量(单位:KB/s)
  • (配合 -N 可指定接口,如 dstat -N eth0)

dstat插件使用

补充说明:dstat的插件机制非常强大,可以使用dstat的插件机制实现很多功能。

可以使用--list选项查看可用的插件列表

root@ihavetwocats:~# dstat --list
internal:
        aio,cpu,cpu-adv,cpu-use,cpu24,disk,disk24,disk24-old,epoch,fs,int,int24,io,ipc,load,lock,mem,mem-adv,net,
        page,page24,proc,raw,socket,swap,swap-old,sys,tcp,time,udp,unix,vm,vm-adv,zones
/usr/share/dstat:
        battery,battery-remain,condor-queue,cpufreq,dbus,disk-avgqu,disk-avgrq,disk-svctm,disk-tps,disk-util,disk-wait,
        dstat,dstat-cpu,dstat-ctxt,dstat-mem,fan,freespace,fuse,gpfs,gpfs-ops,helloworld,ib,innodb-buffer,innodb-io,
        innodb-ops,jvm-full,jvm-vm,lustre,md-status,memcache-hits,mongodb-conn,mongodb-mem,mongodb-opcount,mongodb-queue,
        mongodb-stats,mysql-io,mysql-keys,mysql5-cmds,mysql5-conn,mysql5-innodb,mysql5-innodb-basic,mysql5-innodb-extra,
        mysql5-io,mysql5-keys,net-packets,nfs3,nfs3-ops,nfsd3,nfsd3-ops,nfsd4-ops,nfsstat4,ntp,postfix,power,proc-count,
        qmail,redis,rpc,rpcd,sendmail,snmp-cpu,snmp-load,snmp-mem,snmp-net,snmp-net-err,snmp-sys,snooze,squid,test,
        thermal,top-bio,top-bio-adv,top-childwait,top-cpu,top-cpu-adv,top-cputime,top-cputime-avg,top-int,top-io,
        top-io-adv,top-latency,top-latency-avg,top-mem,top-oom,utmp,vm-cpu,vm-mem,vm-mem-adv,vmk-hba,vmk-int,vmk-nic,
        vz-cpu,vz-io,vz-ubc,wifi,zfs-arc,zfs-l2arc,zfs-zil

【示例】查看总体的性能使用资源使用(CPU、内存、磁盘、网络)显示最大的进程,查看间隔1秒,展示20次的结果

dstat -cdngym --top-cpu --top-mem --top-io 1 20

查看结果如下图所示:
linux-advanced.015

dstat命令常用选项

分类 选项 说明
CPU -c 显示 CPU 使用情况(user、sys、idle、wait、stolen)
内存 -m 显示内存使用情况(used、buff、cache、free)
磁盘IO -d 显示磁盘读写速率(read、write)
网络 -n 显示网络接收和发送速率(recv、send)
分页 -p 显示分页活动(page in/out)
系统 -s 显示系统中断、中断次数、上下文切换次数
进程 –proc 显示进程数变化
时间 -t 在输出中添加时间戳
总览 -a 等价于 -cdngy(CPU、磁盘、网络、分页、系统)
内核IO -y 显示系统中断与上下文切换(类似 vmstat)
文件系统 -f 显示文件系统变化(挂载/卸载)
IO统计 –disk-util 显示每个磁盘设备的利用率
拓展插件 –list 列出系统支持的所有插件

★性能分析神器:Glances

Glances是一个跨平台的系统监控工具(基于 Python 编写),它可以在命令行中以动态、实时的方式显示系统的各类资源使用情况,类似于top或htop,但功能更全面。

glances特点

  • 可同时显示 CPU、内存、磁盘、网络、进程、传感器等信息;
  • 支持 Web 界面远程监控;
  • 支持导出监控数据到文件、InfluxDB、Prometheus 等;
  • 可通过 REST API 提供监控数据。

作为Linux外部的命令工具,可能需要安装,安装方法如下:
Debian / Ubuntu

apt -y install glances

RedHat / CentOS

yum -y install glances

1.glances本机使用

glances

启动之后,会出现类似top命令相似的界面,但是内容比top命令的界面丰富的多,而且界面显示更加清晰,如下图所示:
linux-advanced.016
2.glances启动web服务

glances -w

启动之后默认访问61208端口就可以看到web界面,地址为:http://<server_ip>:61208
3.glances启动远程监控

# 在目标服务器上运行
glances -s
# 在本机连接
glances -c <server_ip>

主要监控内容说明

模块 说明
CPU 显示每个核心的使用率、系统占用、用户占用、IO等待等信息
MEM 内存使用情况,包括 total、used、free、available、swap
LOAD 系统负载(1、5、15分钟平均负载)
DISK I/O 磁盘读写速度、I/O等待、挂载点使用率
NET 各网络接口的上传、下载速率
FS 各文件系统的已用、可用空间
PROC 当前运行进程数、CPU/内存占用最高的进程
SENSORS CPU 温度、风扇转速(若硬件支持)
DOCKER 容器运行情况(如检测到 Docker 环境)

glances常用快捷键

快捷键 功能说明
q 退出 Glances
1 显示每个 CPU 核心的详细使用情况
m 显示内存详情(RAM + Swap)
d 显示磁盘详情
n 显示网络详情
p 显示进程列表
c 按 CPU 使用率排序进程
t 按线程数排序进程
i 按 I/O 使用率排序进程
/ 搜索进程名
h 显示帮助菜单