cpu指标含义解释
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpu指标含义解释相关的知识,希望对你有一定的参考价值。
参考技术A CPU使用率Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息
proc - process information pseudo-file system
查询 man proc
关键指标常用参数
user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
system(通常缩写为 sys),代表内核态 CPU 时间。
idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间
工具使用
top
[root@k8s ~]# top
top - 15:16:08 up 4 days, 3:12, 1 user, load average: 3.77, 2.88, 2.52
Tasks: 255 total, 1 running, 254 sleeping, 0 stopped, 0 zombie
%Cpu0 : 99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 42.3 us, 4.8 sy, 0.0 ni, 50.2 id, 0.7 wa, 0.0 hi, 2.0 si, 0.0 st
KiB Mem : 8173864 total, 753088 free, 3961556 used, 3459220 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3474088 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3482 root 20 0 2430460 1224 760 S 93.7 0.0 832:50.08 kswapd0
29995 root 20 0 5279240 26508 1760 S 64.2 0.3 25:58.04 tsm
2928 root 20 0 1485424 171912 36504 S 6.6 2.1 317:33.63 kubelet
18035 root 20 0 164248 2480 1612 R 0.3 0.0 0:00.53 top
// top 默认显示的是所有 CPU 的平均值,这个时候你只需要按下数字 1 ,就可以切换到每个 CPU 的使用率了。
S 列(也就是 Status 列)表示进程的状态
进程的状态主要有以下几个:
R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。
D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
Z 是 Zombie 的缩写,它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。
I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会。
pidstat
用户态 CPU 使用率 (%usr);
内核态 CPU 使用率(%system);
运行虚拟机 CPU 使用率(%guest);
等待 CPU 使用率(%wait);
总的 CPU 使用率(%CPU)。
[root@k8s ~]# pidstat 1 5
Linux 3.10.0-1062.4.1.el7.x86_64 (instance-010oj085) 04/06/2020 _x86_64_ (2 CPU)
03:23:11 PM UID PID %usr %system %guest %CPU CPU Command
03:23:12 PM 0 1403 0.00 0.97 0.00 0.97 1 kube-controller
03:23:12 PM 0 1638 0.97 0.00 0.00 0.97 1 etcd
03:23:12 PM 0 2492 0.00 1.94 0.00 1.94 1 pidstat
03:23:12 PM 0 2574 0.00 0.97 0.00 0.97 1 hosteye
03:23:12 PM 0 2928 1.94 0.97 0.00 2.91 1 kubelet
03:23:12 PM 0 3233 0.97 0.00 0.00 0.97 1 kube-apiserver
03:23:12 PM 0 3482 100.00 0.00 0.00 100.00 1 kswapd0
perf
perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。可以查找热点函数。
[root@k8s ~]# perf top
Samples: 75K of event 'cycles', 4000 Hz, Event count (approx.): 26597196684 lost: 0/0 drop: 0/0
Overhead Shared Object Symbol
1.57% kswapd0 [.] 0x00000000001c8641
1.10% perf-3482.map [.] 0x00007fdbbf621e8c
0.68% tsm64 [.] 0x000000000002f147
0.61% kswapd0 [.] 0x00000000001c8647
0.60% perf-3482.map [.] 0x00007fdbbf621eb5
输出结果中,第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。
第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。
dstat
dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)
[root@k8s ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
67 3 29 0 0 1|4910B 470k| 0 0 | 0 0 |3645 4917
89 3 6 0 0 3| 0 724k| 394k 267k| 0 0 |5252 4447
90 4 5 0 0 2| 0 140k| 362k 230k| 0 0 |4917 4281
84 3 12 0 0 2| 0 4096B| 287k 196k| 0 0 |4854 4481
84 4 11 0 0 1| 0 216k| 360k 235k| 0 0 |5246 5545
默认输出信息:
CPU状态:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。
磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数。
网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。
分页统计:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。
系统统计:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值
pstree
// 指定 pid 查找父进程
[root@k8s ~]# pstree -aps 18035
systemd,1 --switched-root --system --deserialize 22
`-sshd,2504 -D
`-sshd,16674
`-bash,16676
`-top,18035
总结
用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。
系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。
I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。
软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。
进程状态
ps 或者 top ,可以查看进程的状态,这些状态包括运行(R)、空闲(I)、不可中断睡眠(D)、可中断睡眠(S)、僵尸(Z)以及暂停(T)等。
不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态我们通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。
常见问题
CPU使用率很高,通过top等命令找不到相应的进程
应用里直接调用了其他二进制程序,这些程序通常运行时间比较短,通过 top 等工具也不容易发现。
应用本身在不停地崩溃重启,而启动过程的资源初始化,很可能会占用相当多的 CPU。
nmon指标
表字段分析
关键指标类型 |
关键指标名称 |
关键指标含义 |
SYS_SUMM |
CPU% |
cpu占有率变化情况; |
IO/sec |
IO的变化情况; |
|
AAA |
AIX |
AIX版本号; |
cpus |
CPU数量; |
|
hardware |
被测主机处理器技术; |
|
host |
被测主机名; |
|
interval |
监控取样间隔;(秒) |
|
kernel |
被测主机内核信息; |
|
CPU_ALL |
User% |
显示在用户模式下执行的程序所使用的 CPU 百分比; |
Sys% |
显示在内核模式下执行的程序所使用的 CPU 百分比; |
|
Wait% |
显示等待 IO 所花的时间百分比; |
|
Idle% |
显示 CPU 的空闲时间百分比; |
|
CPU% |
CPU总体占用情况; |
|
DISKBUSY |
Disk %Busy Hostname |
执行间隔时间列表; |
hdisknn |
每个磁盘执行采样数据;(磁盘设备的占用百分比) |
|
DISK_SUMM |
Disk total kb/s Hostname |
执行间隔时间列表; |
Disk Read kb/s |
每个磁盘执行采样数据;(磁盘设备的读速率) |
|
Disk Write kb/s |
每个磁盘执行采样数据;(磁盘设备的写速率) |
|
IO/sec |
每秒钟输出到物理磁盘的传输次数; |
|
NET |
read/write |
本sheet显示系统中每个网络适配器的数据传输速率(千字节/秒) |
JFSFILE |
JFS Filespace %Used Hostname |
执行间隔时间列表; |
file system/LV |
文件系统以及mount磁盘设备已使用空间百分比; |
|
JFSINODE |
JFS Inode %Used Hostname |
执行间隔时间列表; |
file system/LV |
文件系统以及mount磁盘设备的inode已使用空间百分比; |
|
MEM |
Memory Hostname |
执行间隔时间列表; |
Real Free % |
实际剩余内存百分比; |
|
Virtual free % |
虚拟剩余内存百分比; |
|
Real free(MB) |
实际剩余内存大小;(MB) |
|
Virtual free(MB) |
虚拟剩余内存大小;(MB) |
|
Real total(MB) |
实际内存总体大小;(MB) |
|
Virtual total(MB) |
虚拟内存总体大小;(MB) |
|
PAGE |
faults |
每秒的page faults(页错误)数; |
pgin |
每秒钟所读入的页数,包括从文件系统读取的页数 |
|
pgout |
每秒钟所写出的页数,包括写到文件系统的页数 |
|
pgsin |
每秒钟从页面空间所读取的页数 |
|
pgsout |
每秒钟写到页面空间的页数 |
|
reclaims |
从nmon回收这项之前的10个,和vmstat报告的值是一样的,代表了页替换机制释放的pages/sec的数量 |
|
scans |
扫描页替换机制的pages/sec的数量,和vmstat报告的值是一样的,页替换在空闲页数量到达最小值时初始化,在空闲到达最大值时停止 |
|
cycles |
周期 times/sec的数值,页替换机制需要扫描整个页表,来补充空闲列表。这和vmstat报告的cy数值一样,只是vmstat报告的这个值是整形值,而nmon报告的是实型值 |
|
fsin |
分析器计算的数据为pgin-pgsin的图形处理所用 |
|
fsout |
分析器计算的数据为pgout-pgsout的图形处理所用 |
|
sr/fr |
分析器计算的数据为scans/reclaims的图形处理所用 |
命令的操作
nmon 命令
以交互方式显示本地系统统计信息并以记录方式记录系统统计信息。
交互方式:
nmon [ -h ]
nmon [ -s < seconds > ] [ -c < count > ] [ -b ] [ -B ] [ -g < filename > ] [ -k disklist ] [ -C < process1:process2:..:processN > ]
记录方式:
nmon [ -f | -F filename | -x | -X | -z ] [ -r <<A href="http://publib.boulder.ibm.com/infocenter/aix/v6r1/topic/com.ibm.aix.cmds/doc/aixcmds4/nmon.htm#nmp-r"> runname > ] [ -t | -T | -Y ] [ -s seconds ] [ -c number ] [ -w number ] [ -l dpl ] [ -d ] [ -g filename ] [ -k disklist ] [ -C ] [ -G ] [ -K ] [ -o outputpath ] [ -D ] [ -E ] [ -J ] [ -V ] [ -P ] [ -M ] [ -N ] [ -W ] [ -S ] [ -^ ] [ -O ] [ -L ] [ -I percent ] [ -A ] [ -m <<A href="http://publib.boulder.ibm.com/infocenter/aix/v6r1/topic/com.ibm.aix.cmds/doc/aixcmds4/nmon.htm#nmp-di"> dir > ] [ -Z priority ]
在记录方式下,仅指定 -f、-F、-z、-x 或 -X 标志的其中之一作为第一个参数。
nmon 命令显示和记录本地系统信息。此命令可以采用交互方式或记录方式运行。如果指定 -F、-f、-X、-x 和 -Z 标志中的任何一个,那么 nmon 命令处于记录方式。否则 nmon 命令处于交互方式。
nmon 命令以交互方式提供下列视图:
系统资源视图(使用 r 键)
进程视图(使用 t 和 u 键)
AIO 进程视图(使用 A 键)
处理器使用情况小视图(使用 c 键)
处理器使用情况大视图(使用 C 键)
共享处理器逻辑分区视图(使用 p 键)
NFS 面板(使用 N 键)
网络接口视图(使用 n 键)
WLM 视图(使用 W 键)
磁盘繁忙情况图(使用 o 键)
磁盘组(使用 g 键)
ESS 虚拟路径统计信息视图(使用 e 键)
JFS 视图(使用 j 键)
内核统计信息(使用 k 键)
长期处理器平均使用率视图(使用 l 键)
大页分析(使用 L 键)
调页空间(使用 P 键)
卷组统计信息(使用 V 键)
磁盘统计信息(使用 D 键)
磁盘统计信息及图形(使用 d 键)
内存和调页统计信息(使用 m 键)
适配器 I/O 统计信息(使用 a 键)
共享以太网适配器统计信息(使用 O 键)
冗余检查良好/警告/危险视图(使用 v 键)
详细信息页统计信息(使用 M 键)
光纤通道适配器统计信息(使用 ^ 键)
在记录方式下,此命令会生成 .nmon 文件。可以通过打开这些文件来直接进行查看,也可以使用后处理工具(例如,nmon 分析器)来查看。在记录期间,nmon 工具会与 shell 断开连接,以确保该命令即使在您注销的情况下仍然继续运行。
如果每次启动 nmon 命令时使用同一组键,那么可将这些键放在 NMON shell 变量中。例如,可运行以下命令:
export NMON=mcd
然后运行 nmon 命令。
要从命令行停止 nmon 命令,请将 kill -USR2 与 nmon 进程标识配合使用。
要显示 nmon 记录的后台进程标识,请将 nmon 命令与 -p 标志配合使用。
要限制 nmon 命令列示的进程(联机或至文件),可在从 NMONCMD0 至 NMONCMD63 的环境变量中设置程序名称,或将 -C 标志与 cmd:cmd:cmd 参数配合使用。例如,可输入以下命令:
nmon -C ksh:vi:syncd
要将 nmon 列示的磁盘限制为最多 64 个磁盘(仅限于联机磁盘),请将 -k 标志与 diskname 参数配合使用。例如,可输入以下命令:
nmon -k hdisk2,hdisk0,hdisk3
在记录期间,nmon 工具会与 shell 断开连接,以确保该命令即使在您注销的情况下仍然继续运行。如果使用“随需应变”记录设施触发了记录,情况并非如此。
在 nmon 中记录或监视日志文件系统(JFS)统计信息可避免卸载文件系统,原因是收集统计信息时该文件系统在使用中。
在工作负载分区(WPAR)中,nmon 命令会显示处理器和内存统计信息的全局值。余下值是特定于WPAR的。不能在WPAR中检索以下统计信息,并且 nmon 屏幕不支持它们出现在WPAR中:
磁盘、磁盘 I/O 图、磁盘繁忙情况图、磁盘组
磁盘适配器
调页空间
卷组
ESS/虚拟路径
光纤通道适配器
VIOS 共享以太网适配器
可在交互方式下使用下列标志。
刷新屏幕之间的时间间隔。缺省值为 2 秒。 |
|
必须刷新屏幕的次数。 |
|
其中包含用户定义的磁盘组的文件,可以使用 filename 参数来指定此文件。文件中的每一行以组名开头。磁盘列表跟在组名后面,各个硬盘之间用空格分隔。该文件最多可包含 64 个磁盘组。硬盘可属于各种磁盘组。 |
|
显示黑白方式的视图。 |
|
不要在视图中包括框。缺省情况下该命令会显示框。 |
|
显示帮助信息。 |
|
仅报告磁盘列表中的磁盘。 |
在视图中包括异步 I/O 部分。 |
|
指定此命令必须生成的快照数。缺省值为 10000000。 |
|
在视图中包括磁盘服务时间部分。 |
|
跳过磁盘配置部分。 |
|
跳过 ESS 配置部分。 |
|
指定输出使用电子表格格式。缺省情况下,此命令会生成系统数据的 288 个快照,两次生成快照之间的时间间隔为 300 秒。输出文件的名称为 hostname_YYMMDD_HHMM .nmon 格式。 |
|
指定输出使用电子表格格式,并且输出文件的名称为 filename。filename 参数指定输出文件的名称。 |
|
使用 filename 参数指定其中包含用户定义的磁盘组的文件。文件中的每一行以组名开头。磁盘列表跟在组名之后,磁盘之间用空格隔开。该文件最多可包含 64 个磁盘组。磁盘可属于各种磁盘组。 |
|
使用格林威治标准时间(GMT)来代替当地时间。针对处理器视图比较来自一台机器的多个LPAR的 nmon 文件但LPAR在不同时区中时,这样做很有帮助。 |
|
指定命令忽略最繁忙进程统计信息时的进程阈值百分比。缺省百分比为 0。如果进程使用的处理器资源低于给定百分比,那么该命令不会保存最繁忙进程统计信息。 |
|
跳过 JFS 部分。 |
|
指定要记录的磁盘的列表。 |
|
在记录文件中包括 RAW 内核部分和LPAR部分。-K 标志会转储对应数据结构的原始数字。转储是可读的,并且可在命令记录数据时使用。 |
|
指定每一行上要列示的磁盘数。缺省情况下,每行列示 150 个磁盘。对于 EMC 磁盘,指定值 64。 |
|
包括大页分析部分。 |
|
在命令将数据保存至文件之前切换目录。 |
|
在记录文件中包括 MEMPAGES 部分。MEMPAGES 部分会显示对应每个页大小的详细内存统计信息。 |
|
在记录文件中包括 NFS 部分。要收集 NFSv4 统计信息,请指定 -NN。 |
|
指定要将已记录文件存储至的文件名或目录。 |
|
在记录文件中包括共享以太网适配器(SEA)VIOS 部分。 |
|
在记录文件中包括调页空间部分。 |
|
指定写至电子表格文件的 runname 字段的值。缺省情况下,此值为 hostname。 |
|
指定两个连续的记录快照之间的时间间隔(以秒计)。 |
|
在记录文件中包括 WLM 部分以及子类。 |
|
在输出中包括最繁忙进程。不能同时指定 -t、-T 或 -Y 标志当中的任意两者。 |
|
在输出中包括最繁忙进程,并将这些命令行参数保存至 UARG 部分。不能同时指定 -t、-T 或 -Y 标志当中的任意两者。 |
|
包括磁盘卷组部分。 |
|
指定要记录的时间戳记的大小(Tnnnn)。时间戳记记录在 .csv 文件中。number 参数的值的范围是 4 到 16。对于 NMON 分析器,请使用值 4 或 8。 |
|
在记录文件中包括 WLM 部分。 |
|
指定持续时间为 1 天的可感电子表格记录以用于容量规划。缺省情况下,每 900 秒完成一次记录,一共完成 96 次。此标志相当于 -ft -s 900 -c 96。 |
|
指定持续时间为 1 小时的可感电子表格记录以用于容量规划。缺省情况下,每 30 秒完成一次记录,一共完成 120 次。此标志相当于 -ft -s 30 -c 120。 |
|
在记录中包括最繁忙进程以及一起添加和记录的同名命令。不能同时指定 -t、-T 或 -Y 标志。 |
|
指定持续时间为 1 天的可感电子表格记录以用于容量规划。缺省情况下,每 900 秒完成一次记录,一共完成 96 次。此标志相当于 -f -s 900 -c 96。 |
|
指定正在运行的 nmon 命令的优先级。值为 -20 时表示重要。值为 20 时表示不重要。只有 root 用户才能指定负值。 |
|
包括光纤通道(FC)部分。 |
指定磁盘列表。 |
|
指定目录。 |
|
指定每行上要列示的磁盘数。 |
|
指定包含所选磁盘组的文件。 |
|
指定刷新次数。 |
|
指定记录次数。 |
|
指定处理器使用资源的百分比。 |
|
指定要运行的进程的优先级。 |
|
指定要运行的电子表格文件中的 runname 字段的值。 |
|
指定刷新快照的时间间隔(以秒计)。 |
|
指定输出文件的路径。 |
以上是关于cpu指标含义解释的主要内容,如果未能解决你的问题,请参考以下文章