102)linux性能分析命令
1- top
1.1- 输出
top能够实时显示系统中各个进程的资源占用状况.
top - 00:24:36 up 17 min, 2 users, load average: 0.00, 0.01, 0.04
Tasks: 114 total, 3 running, 111 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7990132 total, 7464132 free, 271568 used, 254432 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 7473312 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125360 3808 2588 S 0.0 0.0 0:01.95 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0+
6 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd+
7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration+
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 0:00.44 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-d+
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.02 migration+
14 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd+
15 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kworker/1+
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1+
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
第一行,任务队列信息,同 uptime 命令的执行结果
系统时间:00:24:36
运行时间:up 1:57 min,
当前登录用户: 3 user
负载均衡(uptime) load average: 0.00, 0.00, 0.00
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
第二行,Tasks — 任务(进程)
总进程:150 total, 运行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie
第三行,cpu状态信息
0.0%us【user space】— 用户空间占用CPU的百分比。
0.3%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
99.7%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比
第四行,内存状态
1003020k total, 234464k used, 777824k free, 24084k buffers【缓存的内存量】
第五行,swap交换分区信息
2031612k total, 536k used, 2031076k free, 505864k cached【缓冲的交换区总量】
内存计算方式:
备注:
可用内存=free + buffer + cached
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
详解
**VIRT:virtual memory usage 虚拟内存
**1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:
s – 改变画面更新频率
l – 关闭或开启第一部分第一行 top 信息的表示
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的顺序排列表示进程列表
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
h – 显示帮助
n – 设置在进程列表所显示进程的数量
q – 退出 top
s – 改变画面更新周期
1.2- top使用方法
使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p:通过指定监控进程ID来仅仅监控某个进程的状态。
q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使top不显示任何闲置或者僵死进程。
c:显示整个命令行而不只是显示命令名
2- sar
安装:
apt install sysstat -y
yum install sysstat -y
语法格式:
sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
[root@openshift ~]# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]
[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
[root@openshift ~]#
-A:所有报告的总和
-b:显示I/O和传递速率的统计信息
-B:显示换页状态
-d:输出每一块磁盘的使用信息
-e:设置显示报告的结束时间
-f:从制定的文件读取报告
-i:设置状态信息刷新的间隔时间
-P:报告每个CPU的状态
-R:显示内存状态
–u:输出cpu使用情况和统计信息
–v:显示索引节点、文件和其他内核表的状态
-w:显示交换分区的状态
-x:显示给定进程的装
-r:报告内存利用率的统计信息
2.1- CPU利用率
sar -p (查看全天)
sar -u 1 10 (1:每隔一秒,10:写入10次)
[root@openshift ~]# sar -u 1 10
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:36:48 AM CPU %user %nice %system %iowait %steal %idle
12:36:49 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:36:50 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:36:51 AM all 0.00 0.00 0.50 0.00 0.00 99.50
12:36:52 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:36:53 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:36:54 AM all 0.00 0.00 0.50 0.00 0.00 99.50
12:36:55 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:36:56 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:36:57 AM all 0.00 0.00 0.50 0.00 0.00 99.50
12:36:58 AM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.15 0.00 0.00 99.85
输出项 | 详细说明 |
---|---|
CPU | all 表示统计信息为所有 CPU 的平均值。 |
%user | 显示在用户级别(application)运行使用 CPU 总时间的百分比。 |
%nice | 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 |
%system | 在核心级别(kernel)运行所使用 CPU 总时间的百分比。 |
%iowait | 显示用于等待I/O操作占用 CPU 总时间的百分比。 |
%steal | 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
%idle | 显示 CPU 空闲时间占用 CPU 总时间的百分比。 |
2.2- 内存利用率
sar -r (查看全天)
sar -r 1 10 (1:每隔一秒,10:写入10次)
[root@openshift ~]# sar -r 1 10
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:37:14 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:37:15 AM 7281024 709108 8.87 2108 389952 667084 6.61 281332 223916 0
12:37:16 AM 7281024 709108 8.87 2108 389952 667084 6.61 281336 223916 0
12:37:17 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:18 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:19 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:20 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:21 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:22 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:23 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
12:37:24 AM 7281024 709108 8.87 2108 389952 667084 6.61 281344 223916 0
Average: 7281024 709108 8.87 2108 389952 667084 6.61 281342 223916 0
输出项 | 详细说明 |
---|---|
kbmemfree | 这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间。 |
kbmemused | 这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间。 |
%memused | 这个值是kbmemused和内存总量(不包括swap)的一个百分比。 |
kbbuffers和kbcached | 这两个值就是free命令中的buffer和cache。 |
kbcommit | 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。 |
%commit | 这个值是kbcommit与内存总量(包括swap)的一个百分比。 |
2.3- 磁盘I/O
sar -d (查看全天)
sar -d 1 2 (1:每隔一秒,2:写入2次)
[root@openshift ~]# sar -d 1 2
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:38:08 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
12:38:09 AM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:09 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:09 AM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:09 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
12:38:10 AM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:10 AM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:10 AM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
DEV 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps 每秒I/O的传输总数
rd_sec/s 每秒读取的扇区的总数
wr_sec/s 每秒写入的扇区的总数
avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz 磁盘请求队列的平均长度
await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm I/O的服务处理时间,即不包括请求队列中的时间
%util I/O请求占用的CPU百分比,值越高,说明I/O越慢
2.4- 网络流量
sar -n DEV (查看全天)
-n { <关键词> [,...] | ALL }
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)
sar -n DEV 1 2 (1:每隔一秒,2:写入2次)
[root@openshift ~]# sar -n DEV 1 2
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:38:46 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:38:47 AM ens37 2.00 1.00 0.12 0.09 0.00 0.00 0.00
12:38:47 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:47 AM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:47 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:47 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:38:48 AM ens37 1.98 0.99 0.12 0.20 0.00 0.00 0.00
12:38:48 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:48 AM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:48 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: ens37 1.99 1.00 0.12 0.14 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[root@openshift ~]#
输出项 | 详细说明 |
---|---|
IFACE | 就是网络设备的名称。 |
rxpck/s | 每秒钟接收到的包数目。 |
txpck/s | 每秒钟发送出去的包数目。 |
rxkB/s | 每秒钟接收到的字节数。 |
txkB/s | 每秒钟发送出去的字节数。 |
rxcmp/s | 每秒钟接收到的压缩包数目。 |
txcmp/s | 每秒钟发送出去的压缩包数目。 |
rxmcst/s | 每秒钟接收到的多播包的包数目。 |
2.5- 平均负载
sar -q
sar -q 1 3
[root@openshift ~]# sar -q 1 3
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:39:16 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
12:39:17 AM 0 147 0.01 0.04 0.05 0
12:39:18 AM 0 147 0.01 0.04 0.05 0
12:39:19 AM 0 147 0.01 0.04 0.05 0
Average: 0 147 0.01 0.04 0.05 0
[root@openshift ~]#
runq-sz 运行队列的长度(等待运行的进程数,每核的CP不能超过3个)
plist-sz 进程列表中的进程(processes)和线程数(threads)的数量
ldavg-1 最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
ldavg-5 最后5分钟的CPU平均负载
ldavg-15 最后15分钟的CPU平均负载
blocked
2.6- 系统swap分区统计情况
sar -W
sar -W 1 3
[root@openshift ~]# sar -q 1 3
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:39:16 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
12:39:17 AM 0 147 0.01 0.04 0.05 0
12:39:18 AM 0 147 0.01 0.04 0.05 0
12:39:19 AM 0 147 0.01 0.04 0.05 0
Average: 0 147 0.01 0.04 0.05 0
[root@openshift ~]# sar -W 1 3
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:39:41 AM pswpin/s pswpout/s
12:39:42 AM 0.00 0.00
12:39:43 AM 0.00 0.00
12:39:44 AM 0.00 0.00
Average: 0.00 0.00
pswpin/s 每秒从交换分区到系统的交换页面(swap page)数量
pswpott/s 每秒从系统交换到swap的交换页面(swap page)的数量
2.7- IO和传递速率
sar -b
sar -b 1 3
[root@openshift ~]# sar -b 1 3
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:40:52 AM tps rtps wtps bread/s bwrtn/s
12:40:53 AM 0.99 0.00 0.99 0.00 9.90
12:40:54 AM 0.00 0.00 0.00 0.00 0.00
12:40:55 AM 7.00 0.00 7.00 0.00 115.00
Average: 2.65 0.00 2.65 0.00 41.39
tps 磁盘每秒钟的IO总数,等于iostat中的tps
rtps 每秒钟从磁盘读取的IO总数
wtps 每秒钟从写入到磁盘的IO总数
bread/s 每秒钟从磁盘读取的块总数
bwrtn/s 每秒钟此写入到磁盘的块总数
2.8- 网络设备通信失败信息
sar -n EDVE
sar -n EDEV 1 1
[root@openshift ~]# sar -n EDEV 1 1
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:41:22 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
12:41:23 AM ens37 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:41:23 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:41:23 AM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:41:23 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
Average: ens37 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE 网卡名称
rxerr/s 每秒钟接收到的损坏的数据包
txerr/s 每秒钟发送的数据包错误数
coll/s 当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
rxdrop/s 当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
txdrop/s 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
txcarr/s 当发送数据包的时候,每秒钟载波错误发生的次数
rxfram/s 在接收数据包的时候,每秒钟发生的帧对其错误的次数
rxfifo/s 在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
txfifo/s 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数
2.9- socket连接信息
sar -n SOCK
sar -n SOCK 1 1
[root@openshift ~]# sar -n SOCK 1 1
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:41:58 AM totsck tcpsck udpsck rawsck ip-frag tcp-tw
12:41:59 AM 579 4 2 0 0 0
Average: 579 4 2 0 0 0
totsck 当前被使用的socket总数
tcpsck 当前正在被使用的TCP的socket总数
udpsck 当前正在被使用的UDP的socket总数
rawsck 当前正在被使用于RAW的skcket总数
if-frag 当前的IP分片的数目
tcp-tw TCP套接字中处于TIME-WAIT状态的连接数量
2.10- TCP连接的统计
sar -n TCP
sar -n TCP 1 1
[root@openshift ~]# sar -n TCP 1 1
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
12:44:20 AM active/s passive/s iseg/s oseg/s
12:44:21 AM 0.00 0.00 1.00 1.00
Average: 0.00 0.00 1.00 1.00
active/s 新的主动连接
passive/s 新的被动连接
iseg/s 接受的段
oseg/s 输出的段
2.11- 其他
默认监控: sar 1 1 // CPU和IOWAIT统计状态
(1) sar -b 1 1 // IO传送速率
(2) sar -B 1 1 // 页交换速率
(3) sar -c 1 1 // 进程创建的速率
(4) sar -d 1 1 // 块设备的活跃信息
(5) sar -n DEV 1 1 // 网路设备的状态信息
(6) sar -n SOCK 1 1 // SOCK的使用情况
(7) sar -n ALL 1 1 // 所有的网络状态信息
(8) sar -P ALL 1 1 // 每颗CPU的使用状态信息和IOWAIT统计状态
(9) sar -q 1 1 // 队列的长度(等待运行的进程数)和负载的状态
(10) sar -r 1 1 // 内存和swap空间使用情况
(11) sar -R 1 1 // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)
(12) sar -u 1 1 // CPU的使用情况和IOWAIT信息(同默认监控)
(13) sar -v 1 1 // inode, file and other kernel tablesd的状态信息
(14) sar -w 1 1 // 每秒上下文交换的数目
(15) sar -W 1 1 // SWAP交换的统计信息(监控状态同iostat 的si so)
(16) sar -x 2906 1 1 // 显示指定进程(2906)的统计信息,信息包括:进程造成的错误、用户级和系统级用户CPU的占用情况、运行在哪颗CPU上
(17) sar -y 1 1 // TTY设备的活动状态
(18) 将输出到文件(-o)和读取记录信息(-f)
3- uptime
[root@openshift ~]# uptime
00:44:39 up 37 min, 2 users, load average: 0.00, 0.01, 0.05
#当前服务器时间: ``08``:``21``:``34
#当前服务器运行时长 ``36` `min
#当前用户数 ``2` `users
#当前的负载均衡 load average ``0.00``, ``0.00``, ``0.00``,分别取1min,5min,15min的均值
系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
4- w
w
命令是一个在linux系统中用来显示当前登录用户及这些用户正在做什么的命令。它同时也能显示系统运行时长,当前系统时间和系统平均负载情况。
命令语法格式:
w [OPTIONS] [USER]
21:41:07 up 12 days, 10:08, 2 users, load average: 0.28, 0.20, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.10.0.2 20:59 1.00s 0.02s 0.00s w
linux265 pts/1 10.10.0.8 21:41 7.00s 0.00s 0.00s bash
第一行:
21:41:07
- 当前系统时间.up 12 days, 10:08
- 系统运行时长.2 users
- 登录用户数.load average: 0.28, 0.20, 0.10
- 系统过去1,5,15分钟的平均负载信息。平均系统负载是对当前正在运行或正在等待磁盘I/O的作业数的度量。 它基本上告诉您系统在给定间隔内的繁忙程度。
第二行:
USER
– 登录用户名.TTY
– 登录用户使用的终端名.FROM
–登录用户来源的主机名或IP地址.LOGIN@
– 用户登录时长.IDLE
– 自用户上一次与终端进行交互以来的空闲时间.JCPU
– 附加到tty的所有进程使用的时间.PCPU
–用户当前进程所用的时间。 显示在“ WHAT”字段中的那个.WHAT
– 用户当前的进程及选项/参数。
4.1- 查看指定用户
w root
22:08:55 up 12 days, 10:35, 2 users, load average: 0.00, 0.06, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
linux265 pts/1 10.10.0.8 21:41 27:55 0.00s 0.00s bash
4.2- 命令选项
w -h //--no-header
选项告诉 w
命令不要打印标题头部信息:
w -f //--from
选项用来决定是否显示FROM
字段。 默认情况下,此文件是显示还是隐藏取决于您使用的发行版
w -o //--old-style
选项告诉w使用旧样式输出。 使用此选项时,当IDLE
,JCPU
和PCPU
时间少于一分钟时,该命令将打印空白。
w -s //--short
选项告诉w
使用短样式输出。 使用此选项时,不会打印LOGIN @
,JCPU
和PCPU
字段。
w -i //--ip-addr
选项强制w
在FROM
字段中始终显示IP
地址而不是主机名。
5- dmesg
dmesg 可以查看linux 内核信息.
命令选项:
dmesg --help
Usage:
dmesg [options]
Display or control the kernel ring buffer.
Options:
-C, --clear clear the kernel ring buffer
-c, --read-clear read and clear all messages
-D, --console-off disable printing messages to console
-E, --console-on enable printing messages to console
-F, --file <file> use the file instead of the kernel log buffer
-f, --facility <list> restrict output to defined facilities
-H, --human human readable output
-k, --kernel display kernel messages
-L, --color[=<when>] colorize messages (auto, always or never)
colors are enabled by default
-l, --level <list> restrict output to defined levels
-n, --console-level <level> set level of messages printed to console
-P, --nopager do not pipe output into a pager
-r, --raw print the raw message buffer
-S, --syslog force to use syslog(2) rather than /dev/kmsg
-s, --buffer-size <size> buffer size to query the kernel ring buffer
-u, --userspace display userspace messages
-w, --follow wait for new messages
-x, --decode decode facility and level to readable string
-d, --show-delta show time delta between printed messages
-e, --reltime show local time and time delta in readable format
-T, --ctime show human readable timestamp (may be inaccurate!)
-t, --notime don't print messages timestamp
--time-format <format> show time stamp using format:
[delta|reltime|ctime|notime|iso]
Suspending/resume will make ctime and iso timestamps inaccurate.
-h, --help display this help and exit
5.1- 列出所有被检测到的硬件
显示所有被内核检测到的硬盘设备
dmesg |grep sda
在‘dmesg’命令后跟随‘tail’命令(‘ dmesg | tail -fn20’)来输出‘dmesg’命令的最后20行日志,当你插入可移动设备时它是非常有用的。
5.2- dmesg日志
实时监控dmesg日志输出:
tail -f /var/log/dmesg
5.2- 补充
dmesg -c 清除环形缓存区,但/var/log/dmesg文件中仍然有这些信息。
dmesg | grep DMA 检查硬盘是否运行在DMA模式,可以用在当发现硬盘性能低下时候检查
dmesg | grep eth 当以太网连接有问题时候可以使用他查看,如果一切正常,那么dmesg显示每个网卡的硬件配置信息。如果某项系统服务未能得到正确的配置,dmesg日志很快就填满错误消息,这是诊断故障的良好起点
dmesg | tail 查看尾部信息
6- vmstat
用法:
vmstat [选项参数] [数字] [数字]
报告虚拟内存的统计信息,关于进程、内存、I/O等系统整体运行状态。
选项参数::
- -d: 显示磁盘相关统计信息。
- -a: 显示活跃和非活跃内存
- -f: 显示从系统启动至今的fork数量。
- -p: 显示指定磁盘分区统计信息
- -s: 显示内存相关统计信息及多种系统活动数量。
- -m: 显示slabinfo
6.1- 显示虚拟内存使用情况
[root@openshift ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 7278636 2108 433012 0 0 69 18 47 93 0 0 99 0 0
字段说明:
1. Procs(进程)
r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
b: 等待IO的进程数量。
2.Memory(内存)
swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
free: 空闲物理内存大小。
buff: 用作缓冲的内存大小。
cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
3.Swap
si: 每秒从交换区写到内存的大小,由磁盘调入内存。
so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
4.IO(现在的Linux版本块的大小为1kb)
bi: 每秒读取的块数
bo: 每秒写入的块数
注意:
随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
5.system(系统)
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
注意:
上面2个值越大,会看到由内核消耗的CPU时间会越大。
6.CPU(以百分比表示)
us: 用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
sy: 内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
wa: IO等待时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
id: 空闲时间百分比
6.2- 显示磁盘的信息
[root@openshift ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sr0 0 0 0 0 0 0 0 0 0 0
sda 8948 3 671708 5171 1645 301 179448 1804 0 4
dm-0 6838 0 608076 4715 1930 0 175271 2335 0 4
dm-1 88 0 4408 19 0 0 0 0 0 0
第三列:merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作
6.3- 显示活跃内存与非活跃内存
[root@openshift ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 7280472 223644 281768 0 0 59 16 43 87 0 0 99 0 0
[root@openshift ~]#
6.4- 查看系统已经被fork多少次
[root@openshift ~]# vmstat -f
2259 forks
6.5- 查看特定磁盘设备
[root@openshift ~]# vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
1918 51896 16 4177
这些信息主要来自于/proc/diskstats。
reads: 来自于这个分区的读的次数。
read sectors: 来自于这个分区的读扇区的次数。
writes: 来自于这个分区的写的次数。
requested writes: 来自于这个分区的写请求次数
6.6- 显示slabinfo(slab分配器)
[ less /proc/slabinfo ]
slab是一种内存管理算法:
内存管理有两个算法:伙伴算法(buddy system)和slab算法。伙伴算法是以页为单位管理内存,slab算法是以字节为单位管理内存,是内核的小内存管理算法。特点是基于对象进行管理。
slab分配算法采用cache 存储内核对象,把相同类型的对象归为一类(如进程描述符就是一类),每当要申请这样一个对象,slab分配器就从一个slab列表中分配一个这样大小的单元出去,而当要释放时,将其重新保存在该列表中,而不是直接返回给伙伴系统,从而避免这些内碎片。
slab分配器并不丢弃已分配的对象,而是释放并把它们保存在内存中。当以后又要请求新的对象时,就可以从内存直接获取而不用重复初始化。
[root@openshift ~]# vmstat -m
Cache Num Total Size Pages
nf_conntrack_ffffffff8af12a40 102 102 320 51
ovl_inode 96 96 680 48
kvm_vcpu 0 0 14432 2
xfs_dqtrx 0 0 528 62
xfs_dquot 0 0 488 67
xfs_ili 1872 1872 168 48
xfs_inode 3094 3094 960 34
xfs_efd_item 117 117 416 39
xfs_log_ticket 132 132 184 44
bio-3 153 153 320 51
kcopyd_job 0 0 3312 9
dm_uevent 0 0 2608 12
dm_rq_target_io 0 0 136 60
ip6_dst_cache 144 144 448 36
RAWv6 312 312 1216 26
UDPLITEv6 0 0 1216 26
UDPv6 52 52 1216 26
tw_sock_TCPv6 0 0 256 64
TCPv6 30 30 2112 15
cfq_queue 0 0 232 70
bsg_cmd 0 0 312 52
mqueue_inode_cache 36 36 896 36
Cache Num Total Size Pages
hugetlbfs_inode_cache 53 53 608 53
configfs_dir_cache 0 0 88 46
dquot 0 0 256 64
kioctx 112 112 576 56
userfaultfd_ctx_cache 0 0 192 42
pid_namespace 0 0 2200 14
posix_timers_cache 132 132 248 66
UDP-Lite 0 0 1088 30
flow_cache 0 0 144 56
UDP 60 60 1088 30
tw_sock_TCP 64 64 256 64
TCP 32 32 1984 16
dax_cache 84 84 768 42
blkdev_queue 39 39 2456 13
blkdev_ioc 78 78 104 39
user_namespace 136 136 480 68
dmaengine-unmap-128 30 30 1088 30
sock_inode_cache 1071 1071 640 51
fsnotify_mark_connector 340 340 24 170
net_namespace 6 6 5248 6
shmem_inode_cache 1824 1824 680 48
Acpi-State 204 204 80 51
Cache Num Total Size Pages
task_delay_info 324 324 112 36
taskstats 98 98 328 49
proc_inode_cache 1666 1666 656 49
sigqueue 102 102 160 51
bdev_cache 78 78 832 39
kernfs_node_cache 48620 48620 120 68
mnt_cache 1134 1134 384 42
inode_cache 22220 22220 592 55
dentry 114156 114156 192 42
iint_cache 0 0 128 64
avc_xperms_node 219 219 56 73
avc_node 10472 10472 72 56
selinux_inode_security 26826 26826 40 102
buffer_head 17589 17589 104 39
vm_area_struct 4433 4551 216 37
mm_struct 80 80 1600 20
files_cache 255 255 640 51
signal_cache 308 308 1152 28
sighand_cache 269 300 2112 15
task_xstate 351 351 832 39
task_struct 286 301 4208 7
anon_vma 2550 2550 80 51
Cache Num Total Size Pages
shared_policy_node 2975 2975 48 85
numa_policy 186 186 264 62
radix_tree_node 2856 2856 584 56
idr_layer_cache 255 255 2112 15
dma-kmalloc-8192 0 0 8192 4
dma-kmalloc-4096 0 0 4096 8
dma-kmalloc-2048 0 0 2048 16
dma-kmalloc-1024 0 0 1024 32
dma-kmalloc-512 64 64 512 64
dma-kmalloc-256 0 0 256 64
dma-kmalloc-128 0 0 128 64
dma-kmalloc-64 0 0 64 64
dma-kmalloc-32 0 0 32 128
dma-kmalloc-16 0 0 16 256
dma-kmalloc-8 0 0 8 512
dma-kmalloc-192 0 0 192 42
dma-kmalloc-96 0 0 96 42
kmalloc-8192 40 44 8192 4
kmalloc-4096 273 304 4096 8
kmalloc-2048 8378 8448 2048 16
kmalloc-1024 3441 3520 1024 32
kmalloc-512 11200 11200 512 64
Cache Num Total Size Pages
kmalloc-256 12361 12736 256 64
kmalloc-192 14641 14910 192 42
kmalloc-128 2176 2176 128 64
kmalloc-96 9030 9030 96 42
kmalloc-64 18910 19328 64 64
kmalloc-32 7680 7680 32 128
kmalloc-16 13056 13056 16 256
kmalloc-8 9728 9728 8 512
kmem_cache_node 192 192 64 64
kmem_cache 192 192 256 64
6.7 实时显示内核slab内核缓存信息
slabtop:
slabtop –delay=n, -d n 每隔n秒刷新信息
slabtop –sort=S, -s S 按照S排序,其中S为排序标准
–once, -o 显示一次并退出
Active / Total Objects (% used) : 460418 / 463071 (99.4%)
Active / Total Slabs (% used) : 9555 / 9555 (100.0%)
Active / Total Caches (% used) : 69 / 98 (70.4%)
Active / Total Size (% used) : 105917.41K / 106927.14K (99.1%)
Minimum / Average / Maximum Object : 0.01K / 0.23K / 14.09K
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
151032 151032 100% 0.19K 3596 42 28768K dentry
58734 58734 100% 0.10K 1506 39 6024K buffer_head
48620 48620 100% 0.12K 715 68 5720K kernfs_node_cache
26826 26826 100% 0.04K 263 102 1052K selinux_inode_security
22495 22386 99% 0.58K 409 55 13088K inode_cache
19392 18829 97% 0.06K 303 64 1212K kmalloc-64
15456 14701 95% 0.19K 368 42 2944K kmalloc-192
13504 13168 97% 0.25K 211 64 3376K kmalloc-256
13056 13056 100% 0.02K 51 256 204K kmalloc-16
11328 11266 99% 0.50K 177 64 5664K kmalloc-512
10472 10472 100% 0.07K 187 56 748K avc_node
9728 9728 100% 0.01K 19 512 76K kmalloc-8
9618 9618 100% 0.09K 229 42 916K kmalloc-96
8576 8492 99% 2.00K 536 16 17152K kmalloc-2048
7680 7680 100% 0.03K 60 128 240K kmalloc-32
5217 5217 100% 0.21K 141 37 1128K vm_area_struct
3528 3528 100% 0.57K 63 56 2016K radix_tree_node
7- iostat
用于输出CPU和磁盘I/O相关的统计信息
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ]]
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出
7.1- 从系统开机到当前执行时刻的统计信息
[root@openshift ~]# iostat
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.15 0.00 0.27 0.01 0.00 99.57
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.82 50.75 40.24 336018 266438
dm-0 1.57 45.94 39.93 304202 264349
dm-1 0.01 0.33 0.00 2204 0
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。
Device: 各磁盘设备的IO统计信息。各列含义如下:
Device: 以sdX形式显示的设备名称 tps: 每秒进程下发的IO读、写请求数量 KB_read/s: 每秒从驱动器读入的数据量,单位为K。 KB_wrtn/s: 每秒从驱动器写入的数据量,单位为K。 KB_read: 读入数据总量,单位为K。 KB_wrtn: 写入数据总量,单位为K。
7.2- 查看设备使用率(%util)、响应时间(await)
每隔1S输出磁盘IO的详细详细,总共采样2次
[root@openshift ~]# iostat -x -k -d 1 2
##参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.06 1.34 0.46 50.07 39.71 99.73 0.00 1.40 0.59 3.73 0.43 0.08
dm-0 0.00 0.00 1.02 0.53 45.33 39.40 109.49 0.00 1.65 0.70 3.49 0.47 0.07
dm-1 0.00 0.00 0.01 0.00 0.33 0.00 50.09 0.00 0.22 0.22 0.00 0.10 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/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
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
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
重点关注参数:
1、iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
2、avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
3、await 表示每次IO请求等待时间,包括等待时间和处理时间
4、svctm 表示每次IO请求处理的时间
5、%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
7.3- 查看TPS和吞吐量信息
[root@openshift ~]# iostat -d -k 1 2
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.76 48.67 38.66 336018 266881
dm-0 1.51 44.06 38.35 304202 264792
dm-1 0.01 0.32 0.00 2204 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
7.4- 获取CPU状态值
[root@openshift ~]# iostat -c 1 2
Linux 3.10.0-1062.el7.x86_64 (openshift) 10/12/2020 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.14 0.00 0.26 0.01 0.00 99.59
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00