[命令] Linux 命令 iostat (显示硬盘读写和处理器占用状况) (转载)

iostat 介绍

iostat用于查看存储设备的IO负载情况,输出信息是指定间隔时间内的平均数据,可以持续输出观察。
通过iostat --help通常看不到直观的信息

[root@master ~]# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

    1
    2
    3
    4
    5
    6

可以通过man iostat来查看该命令的具体解释
man iostat|cat > iostat_help.txt

1.常用的选项

OPTIONS
       -c     展示CPU使用情况
       -d     展示存储设备使用情况
       -h     使输出信息更易看。
       -k     使某些使用block为单位的列强制使用k为单位显示统计信息
       -m     使某些使用block为单位的列强制使用m为单位显示统计信息
       -N     显示任何已注册设备映射器名称, 用于查看LVM2统计
       -n     展示NFS使用情况
       -p [ { device [,...] | ALL } ]
              显示设备块及其分区统计信息,可以单独指定特定的设备
       -t     打印显示的每个报表的时间, 时间戳格式可能取决于S_TIME_FORMAT环境变量
       -V     显示iostat版本
       -x     显示扩展统计信息
       -y     如果指定了持续输出,那么忽略默认显示的第一次统计信息,即从系统启动直到执行命令的平均信息。
       -z     省略在采样期间没有活动的任何设备的输出.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

2.执行样例

       iostat
              展示从系统启动到执行命令期间的CPU和存储设备平均统计信息
       iostat -d 2
              以2秒间隔展示存储设备统计信息
       iostat -d 2 6
              以2秒间隔展示存储设备统计信息,共展示6次
       iostat -x hda hdb 2 6
              以2秒间隔展示存储设备hda和hdb的拓展统计信息,共展示6次
       iostat -p sda 2 6
              以2秒间隔展示存储设备sda及其分区的统计信息,共展示6次

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

3.输出信息解析

# iostat -x -d -m -y -c 2 10
Linux 3.10.0-229.el7.x86_64 (KYL-DB-MYSQL-SLAVE01)      05/09/2019      _x86_64_        (24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.40    0.00    0.38    4.13    0.00   95.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00     0.00   14.00  563.00     0.07    19.51    69.49     1.40    2.46    9.89    2.28   0.88  50.90
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00   13.50  562.50     0.07    19.50    69.58     1.41    2.47   10.26    2.28   0.88  50.95

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

1.CPU信息
%user:用户态CPU使用率
%nice:优先级变化占用CPU的使用率
%system:内核态CPU使用率
%iowait:CPU等待IO的占比
%steal:虚拟CPU等待实际CPU的时间的百分比
%idle:CPU空闲率

2.存储设备信息
rrqm/s:每秒对该设备的读请求的合并次数
wrqm/s:每秒对该设备的写请求的合并次数
r/s:每秒读取的次数
w/s:每秒写入的次数
rMB/s:以m为单位计算每秒读取量
wMB/s:以m为单位计算每秒写入量
avgrq-sz:平均每次IO操作的数据量(扇区数为单位),包括读和写
avgqu-sz:平均等待处理的IO请求队列长度
await:平均IO等待时间(milliseconds),包括排队时间和IO执行时间
r_await:平均读取等待时间(milliseconds),包括排队时间和IO执行时间
w_await:平均写入等待时间(milliseconds),包括排队时间和IO执行时间
svctm:平均IO服务时间(milliseconds),不准确
%util:统计时间内,CPU处理IO的时间对于间隔时间的占比,例如间隔2秒,CPU处理IO占了1秒,那么就是50%,可以体现存储设备的繁忙程度
————————————————
版权声明:本文为CSDN博主「灯火觅阑珊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39004901/article/details/90022623

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z
站主补充:连续两个数字参数的作用
# iostat -2 -3

(补充:这里的 -2 表示每过两秒刷新 1 次,-3 表示)

[内容] Linux 硬件信息的显示 (处理器、内存、硬盘和其他硬件信息)

内容一:显示处理器信息

1.1 显示处理器进程 (虚拟核心) 数

# cat /proc/cpuinfo | egrep "core id|physical id|processor" | tr -d "\n" | sed s/processor/\\nprocessor/g | sed 's/physical/     physical/' | sed 's/core/     core/' | grep -v ^$ | wc -l

1.2 显示处理器物理核心数

# cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l

1.3 显示物理封装处理器 (处理器 socket) 数

# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

1.4 显示处理器的详细信息

# lscpu

或者:

# cat /proc/cpuinfo

(补充链接:Linux 处理器详细信息的显示 (显示 /proc/cpuinfo 文件里的信息)

内容二:显示内存信息

2.1 显示内存使用情况

# free -m

(注意:这里显示的内存会比真实的硬件内存大小小一点)

2.2 显示内存详细信息

# cat /proc/meminfo

2.3 显示内存的总大小

# memunit=`dmidecode -t memory | egrep -i 'Size:' | egrep -i 'kb|mb|gb' | egrep -v -i 'Volatile|Maximum|Memory|Installed|Enabled' | awk '{print $NF}' | head -1`;memsize=`dmidecode -t memory | egrep -i 'Size:' | egrep -i 'kb|mb|gb' | egrep -v -i 'Volatile|Maximum|Memory|Installed|Enabled' | awk 'BEGIN{memtotal=0}{memtotal+=$2}END{print memtotal}'`; echo "$memsize $memunit"

内容三:显示硬盘信息

3.1 显示硬盘使用情况

# df -h

3.2 显示硬盘信息

# lsblk

3.3 显示硬盘总大小

# disksizeb=`lsblk -b | egrep -iv '\/|SWAP|NAME' | awk '$1!~/[0-9]/' | egrep 'disk' | awk 'BEGIN{disktotal=0}{disktotal=disktotal+$4}END{print disktotal}'`;let disksizek=$disksizeb/1024;let disksizem=$disksizek/1024;let disksizeg=$disksizem/1024;echo "$disksizeg GB"

内容四:显示其他硬件的信息

4.1 显示其他所有硬件的信息

# dmesg

4.2 显示某 1 个硬件的信息

# dmesg | grep -i mouse

(补充:这里以显示鼠标信息的方法为例)

[工具] Shell 检测性能指标 (例如:剩余硬盘空间、内存空间等)

介绍

基本信息

名称: 检测性能指标(例如:剩余硬盘空间、内存空间等)
作用: 检测性能指标(例如:剩余硬盘空间、内存空间等)

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本

脚本

#!/bin/bash

ip=`ip a s | awk '/[1-2]?[0-9]{0,2}\.[1-2]?[0-9]{0,2}/&&!/127.0.0.1/{print $2}'`
host=`hostname`
disk=`df -h | awk '/\/$/{print $5}'`
mem=`free -m | awk '/Mem/{print $4}'`
cpu=`top -bn 1 | awk -F',' '/^%Cpu/{print $4 }' | awk '{print $1}'`
soft=`rpm -qa | wc -l`
port=`ss -ntulap | wc -l`

echo "$ip $host disk $disk"
echo "$ip $host mem $mem"
echo "$ip $host cpu $cpu"
echo "$ip $host soft $soft"
echo "$ip $host port $port"
echo

[命令] Linux 命令 top (显示资源和进程)

内容一:top 命令解析

1.1 top 命令输出结果

# top
top - 14:16:16 up 6 days, 20:52,  4 users,  load average: 0.00, 0.00, 0.00
Tasks: 393 total,   1 running, 392 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   5848752 total,  5709944 used,   138808 free,     4960 buffers
KiB Swap:  2103292 total,        0 used,  2103292 free.  4507072 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S   %CPU  %MEM     TIME+ COMMAND                                      
    8 root      20   0       0      0      0 S  0.332 0.000   2:12.60 rcu_sched                                    
  716 z0042h2+  20   0   15484   2840   2132 R  0.332 0.049   0:00.09 top                                          
31993 root      20   0       0      0      0 S  0.332 0.000   0:00.08 kworker/u32:2                                
    1 root      20   0  189604   5892   4120 S  0.000 0.101   2:35.86 systemd                                      
    2 root      20   0       0      0      0 S  0.000 0.000   0:00.72 kthreadd                                     
    4 root       0 -20       0      0      0 S  0.000 0.000   0:00.00 kworker/0:0H

1.2 top 命令输出结果简介

1.2.1 top 命令输出结果分类

1) 前 5 行是整体的统计信息
2) 后面的是具体的进程信息

1.2.2 统计信息说明
1.2.2.1 第 1 行信息

1) 14:16:16 系统当前时间
2) 20:52 系统运行了多久
3) 4 users 系统当前登录用户数
4) load average: 0.00, 0.00, 0.00 系统平均负载


补充:
1) 其中的三个数值分别代表:1,5,15 分钟的系统平均负载
2) 单核 CPU 的情况下:0.00 代表 0 负载,1.00 代表满载,超过 1 代表超负荷
3) 理想情况是:CPU 的核心数 * 0.7 = 整个系统的理想负载

1.2.2.2 第 2 行信息

1) Tasks: 393 total 总进程数
2) 1 running 正在运行的进程数
3) 392 sleeping 睡眠进程数
4) 0 stopped 停止进程数
5) 0 zombie 僵尸进程数

1.2.2.3 第 3 行信息


注意:
1) 这一行默认是所有 CPU 核心加在一起的平均值,如果有 1 个核心那满值就是 100%,如果有 5 个核心那总值就是 500%
2) 如果此时输入数字 1 ,则可以切换至每个单核 CPU 的负载情况,再输入数字 1,则可以再切换回来

1) 0.0 us 用户空间占用 CPU 的百分比
2) 0.0 sy 内核空间占用 CPU 的百分比
3) 0.0 ni 非实时的进程的优先级,取值范围为从 -20 到 19,数值越小优先级越高
4) 100.0 id 空闲的 CPU 的百分比
5) 0.0 wa CPU 等待输入输出的时间百分比
6) 0.0 hi 服务因硬件中断所消耗的时间百分比
7) 0.0 si 服务因软件中断所消耗的时间百分比
8) 0.0 st 虚拟机被物理机偷去的 CPU 时间百分比

1.2.2.4 第 4 行信息

1) 5848752 total 总物理内存量
2) 5709944 used 已经使用的物理内存量
3) 138808 free 剩余的物理内存量
4) 4960 buffers 用作内核缓存的内存量

1.2.2.5 第 5 行信息

1) 2103292 total 总交换分区量
2) 0 used 已经使用的交换分区量
3) 2103292 free 剩余交换分区量
4) 4507072 cached Mem 用作缓存的交换分区量

1.2.3 进程信息说明


补充:
1) 此时按下 “f” 键可以选择要显示的信息
2) 此时按下 “方向” 键翻看想查阅的内容
3) 此时按下 “s” 键可以开启显示这一信息
4) 此时按下 “d” 键可以关闭显示这一信息
4) 带 * 号的是已经选择要显示的信息

1) PID (Process Id) 进程的 id
2) USER (User Name) 进程所有者的用户
3) PR (Priority) 优先级
4) NI (Nice value) nice 值(负值表示高优先级,正值表示低优先级)
5) VIRT ( Virtual Image (kb) ) 进程使用的虚拟内存量,单位 kb
6) RES ( Resident size (kb) ) 进程使用的、未被换出的物理内存大小,单位 kb
7) SHR (Shared Mem size (kb) ) 共享内存大小,单位 kb
8) S (Process Status) 进程状态,可以为 D R S T 和 Z

(补充:D 表示不可中断的睡眠状态,R 表示运行,S 表示睡眠,T 表示跟踪/停止,Z 表示僵尸进程)

9) %CPU (CPU usage) 上上次更新到上次更新时进程 CPU 占用平均百分比

(注意:此值可能会超过 100% ,但不会超过:CPU 总核心数 * 100% )

10) %MEM ( Memory usage (RES) ) 上上次更新到上次更新时进程使用的物理内存百分比
11) TIME+ ( CPU Time, hundredths ) 进上上次更新到上次更新时进程使用 CPU 的总时间,单位 1/100 秒
12) COMMAND (Command name/line) 命令名或命令行 (命令和选项)

内容二:top 非交互式命令选项

1) -b 以批处理模式执行命令
2) -c <command> 在执行了 top 命令之后再直接执行交互命令
3) -d <time> 屏幕刷新间隔时间
4) -i 忽略僵尸进程
5) -s 以安全模式执行命令
6) -S 以累积模式执行命令
7) -i <时间> 设置间隔时间
8) -u <用户> 指定只显示某个用户的进程
9) -p <进程号> 指定只显示某个 PID 的进程
10) -n <次数> 指定显示循环的次数

内容三:top 交互命令 (即是在键入了 top 命令之后再键入以下命令)

3.1 基础操作

按 “h” 显示帮助

3.2 设置操作

1) 按下 “k” 键再按下 “<pid>” 再按下 “<回车>” 键,将某个 pid 为 <pid> 的进程删除
2) 按下 “r” 键再按下 “<ni>” 再按下 “<回车>” 键,将某个进程的 ni 设置为 <ni>,取值范围为从 -20 到 19,数值越小优先级越高

(注意:只有 root 的取值范围才是 -20 到 19 ,普通用户的取值范围是 0 到 19)

3) 按下 “esc” 键,退出 top 命令当前的子状态,如果没有子状态则不退出
4) 按下 “q” 键,退出 top

3.3 显示操作

1) 按下 “d” 键再按 <number> 再按下 “回车” ,将刷新频率修改为 <number> 秒
2) 按下 “s” 键再按 <number> 再按下 “回车”,将刷新的延迟时间修改为 <number> 秒 (默认是 5S)
3) 按下 “n” 键再按 <number> 再按下 “回车”,将显示的行数修改为 <number> 行 (默认显示能满屏的行数)
4) 按下 “f” 键,选择要显示的信息
5) 按下 “i” 键,不显示闲置和僵死进程,再按下 “i” 键会取消
6) 按下 “S” 键,切换到累积模式,再按下 “S” 键会取消
7) 按下 “l” 键,隐藏第 1 行总负载信息,再按下 “l” 键会取消
8) 按下 “t” 键, 隐藏第 2~3 行 CPU 信息,再按下 “t” 键会取消
9) 按下 “m” 键,隐藏第 4~5 行内存信息,再按下 “m” 键会取消
10) 按下 “1” 键,显示 CPU 所有核心的信息,每核显示 1 行,再按下 “1” 键会取消

3.4 排序操作

1) 按下 “M” 键,根据使用内存的大小进行排序
2) 按下 “P” 键,根据使用 CPU 的大小进行排序
3) 按下 “T” 键,根据开启的时间进行排序

内容四:top 命令使用案例

4.1 案例一:显示 top 命令运行 1 秒钟时的信息

# top -bn 1

4.2 案例二:显示 top 命令运行 1 秒钟时的 CPU 占用率最高的进程

# top -bn 1 -i -c