AIOps 一场颠覆传统运维的盛筵
869
2022-10-16
Linux下性能调试工具运维笔记
作为一名资深的linux运维工程师,为方便了解和追求服务器的高性能,如cpu、内存、io、网络等等使用情况,要求运维工程师必须要熟练运用一些必要的系统性能调试工具,liunx下提供了众多命令方便查看各种资源的使用情况。经常用的有ps、top、free、mpstat、iostat、vmstat、netstat。。下面简单介绍下这几个工具的使用:
一、toptop是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表,该命令可以按CPU使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
命令使用top使用格式top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p 通过指定监控进程ID来仅仅监控某个进程的状态。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名
[root@jumpserver01 ~]# top -ctop - 15:41:05 up 38 days, 14 min, 4 users, load average: 29.03, 29.03, 29.00Tasks: 897 total, 30 running, 867 sleeping, 0 stopped, 0 zombieCpu(s): 71.8%us, 0.8%sy, 0.0%ni, 27.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 65724264k total, 37654212k used, 28070052k free, 371320k buffersSwap: 32767996k total, 0k used, 32767996k free, 31845892k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22107 duanjunf 20 0 360m 37m 4768 R 100.0 0.1 28162:37 python /data/jumpserver/connect.py 38740 sunyuanc 20 0 360m 36m 4768 R 100.0 0.1 24262:12 python /data/jumpserver/connect.py 38766 sunyuanc 20 0 360m 36m 4768 R 100.0 0.1 24261:54 python /data/jumpserver/connect.py 68261 xieyidan 20 0 360m 36m 4768 R 100.0 0.1 19655:44 python /data/jumpserver/connect.py 97841 sunyuanc 20 0 360m 37m 4768 R 100.0 0.1 44953:16 python /data/jumpserver/connect.py 104229 wangbinr 20 0 360m 36m 4768 R 100.0 0.1 44451:25 python /data/jumpserver/connect.py 115357 shanghai 20 0 360m 37m 4768 R 100.0 0.1 13165:59 python /data/jumpserver/connect.py 115545 shanghai 20 0 360m 36m 4768 R 100.0 0.1 13160:54 python /data/jumpserver/connect.py 115582 shanghai 20 0 360m 37m 4768 R 100.0 0.1 13160:10 python /data/jumpserver/connect.py 128364 duanjunf 20 0 360m 37m 4768 R 100.0 0.1 41810:20 python /data/jumpserver/connect.py 141827 sunyuanc 20 0 360m 36m 4768 R 100.0 0.1 40111:40 python /data/jumpserver/connect.py 170184 duanjunf 20 0 360m 36m 4768 R 100.0 0.1 34627:54 python /data/jumpserver/connect.py 180787 sunyuanc 20 0 360m 36m 4768 R 100.0 0.1 33316:45 python /data/jumpserver/connect.py 11168 xieyidan 20 0 360m 36m 4768 R 99.7 0.1 29940:19 python /data/jumpserver/connect.py 46745 wangbinr 20 0 360m 37m 4768 R 99.7 0.1 22848:20 python /data/jumpserver/connect.py 50740 wangbinr 20 0 360m 37m 4768 R 99.7 0.1 22601:23 python /data/jumpserver/connect.py 62308 xieyidan 20 0 360m 37m 4768 R 99.7 0.1 20280:22 python /data/jumpserver/connect.py 73232 xieyidan 20 0 360m 35m 4768 R 99.7 0.1 18553:01 python /data/jumpserver/connect.py 93496 chengjun 20 0 360m 36m 4768 R 99.7 0.1 14455:38 python /data/jumpserver/connect.py 93799 chengjun 20 0 360m 37m 4768 R 99.7 0.1 14417:51 python /data/jumpserver/connect.py以上指令信息解释:统计信息区前五行是系统整体的统计信息。1)第一行是任务队列信息,同 uptime 命令的执行结果。内容如下:15:41:05 当前时间up 38 days, 14 min 系统运行时间,格式为时:分4 users 当前登录用户数load average: 29.03, 29.03, 29.00 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。2)第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:(top命令回车后,按数字"1"就会显示cpu的核数,前提是当前屏幕足够大,能够全部显示cpu核数)total 进程总数running 正在运行的进程数sleeping 睡眠的进程数stopped 停止的进程数zombie 僵尸进程数Cpu(s): 71.8% us 用户空间占用CPU百分比0.8% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比27.4% id 空闲CPU百分比0.0% wa 等待输入输出的CPU时间百分比0.0%hi:硬件CPU中断占用百分比0.0%si:软中断占用百分比0.0%st:虚拟机占用百分比3)最后两行为内存信息。内容如下:Mem:65724264k total 物理内存总量37653788k used 使用的物理内存总量28070476k free 空闲内存总量371320k buffers 用作内核缓存的内存量Swap: 32767996k total 交换区总量0k used 使用的交换区总量32767996k free 空闲交换区总量31845892k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。4)进程信息区统计信息区域的下方显示了各个进程的详细信息。 列名 含义 PID 进程id PPID 父进程id RUSER Real user name UID 进程所有者的用户id USER 进程所有者的用户名 GROUP 进程所有者的组名 TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? PR 优先级 NI nice值。负值表示高优先级,正值表示低优先级 P 最后使用的CPU,仅在多CPU环境下有意义 %CPU 上次更新到现在的CPU时间占用百分比 TIME 进程使用的CPU时间总计,单位秒 TIME+ 进程使用的CPU时间总计,单位1/100秒 %MEM 进程使用的物理内存百分比 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA CODE 可执行代码占用的物理内存大小,单位kb DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb SHR 共享内存大小,单位kb nFLT 页面错误次数 nDRT 最后一次写入到现在,被修改过的页面数。 S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) COMMAND 命令名/命令行 WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 Flags 任务标志,参考 sched.h默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。------------------------------------------------------------------------------------------------------------------------------------------Ctrl+L 擦除并且重写屏幕。 h或者? 显示帮助画面,给出一些简短的命令总结说明。 k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序。 r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 S 切换到累计模式。 s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。 l 切换显示平均负载和启动时间信息。 m 切换显示内存信息。 t 切换显示进程和CPU状态信息。 c 切换显示命令名称和完整命令行。 M 根据驻留内存大小进行排序。 P 根据CPU使用百分比大小进行排序。 T 根据时间/累计时间进行排序。 W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。f或者F 从当前显示中添加或者删除项目。 按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。o或者O 改变显示项目的顺序。 按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。按大写的M 可以降序显示内存使用率按大写的P 可以降序显示CPU使用率---------------------------------------------------------------------------------------------------------------------------------------常用操作命令:# top //每隔5秒显式所有进程的资源占用情况# top -d 2 //每隔2秒显式所有进程的资源占用情况# top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)# top -p 12345 -p 6789 //每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况# top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
二、sarsar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,它将指定的操作系统状态计数器显示到标准输出设备,可以从多方面对系统的活动进行报告,包括:文件的读写情况、 系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
sar命令常用格式sar [options] [-A] [-o file] t [n]
其中:t为采样间隔,n为采样次数,默认值是1;-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。options 为命令行选项
sar命令常用选项如下:
[root@jumpserver01 ~]# sar --help用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]Options are:[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ][ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ][ -I {
使用案例:1)CPU资源监控例如,每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中,需键入如下命令:
[root@jumpserver01 ~]# sar -u -o test 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:09:49 CPU %user %nice %system %iowait %steal %idle00:09:59 all 0.00 0.00 0.03 0.05 0.00 99.9200:10:09 all 0.05 0.00 0.08 0.10 0.00 99.7700:10:19 all 0.00 0.00 0.00 0.05 0.00 99.95Average: all 0.02 0.00 0.03 0.07 0.00 99.88[root@jumpserver01 ~]# ll test-rw-r--r--. 1 root root 42632 Jan 4 00:10 test输出项说明:CPU:all 表示统计信息为所有 CPU 的平均值。%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。如果要查看二进制文件test中的内容,需键入如下sar命令:[root@jumpserver01 ~]# sar -u -f testLinux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:09:49 CPU %user %nice %system %iowait %steal %idle00:09:59 all 0.00 0.00 0.03 0.05 0.00 99.9200:10:09 all 0.05 0.00 0.08 0.10 0.00 99.7700:10:19 all 0.00 0.00 0.00 0.05 0.00 99.95Average: all 0.02 0.00 0.03 0.07 0.00 99.88
2)inode、文件和其他内核表监控例如,每10秒采样一次,连续采样3次,观察核心表的状态,需键入如下命令:
[root@jumpserver01 ~]# sar -v 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:13:17 dentunusd file-nr inode-nr pty-nr00:13:27 106660 960 64780 200:13:37 106660 960 64780 200:13:47 106660 960 64780 2Average: 106660 960 64780 2输出项说明:dentunusd:目录高速缓存中未被使用的条目数量file-nr:文件句柄(file handle)的使用数量inode-nr:索引节点句柄(inode handle)的使用数量pty-nr:使用的pty数量
3)内存和交换空间监控例如,每10秒采样一次,连续采样3次,监控内存分页
[root@jumpserver01 ~]# sar -r 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:14:42 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit00:14:52 551360 5441372 90.80 142256 4907464 135520 1.1200:15:02 551360 5441372 90.80 142256 4907464 135520 1.1200:15:12 551360 5441372 90.80 142260 4907464 135520 1.12Average: 551360 5441372 90.80 142257 4907464 135520 1.12输出项说明:kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
4)内存分页监控例如,每10秒采样一次,连续采样3次,监控内存分页:
[root@jumpserver01 ~]# sar -B 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:16:29 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff00:16:39 0.00 0.40 7.21 0.00 12.61 0.00 0.00 0.00 0.0000:16:49 0.00 0.00 4.30 0.00 12.60 0.00 0.00 0.00 0.0000:16:59 0.00 0.00 3.40 0.00 12.20 0.00 0.00 0.00 0.00Average: 0.00 0.13 4.97 0.00 12.47 0.00 0.00 0.00 0.00输出项说明:pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)majflt/s:每秒钟产生的主缺页数.pgfree/s:每秒被放入空闲队列中的页个数pgscank/s:每秒被kswapd扫描的页个数pgscand/s:每秒直接被扫描的页个数pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
5)I/O和传送速率监控例如,每10秒采样一次,连续采样3次,报告缓冲区的使用情况,需键入如下命令:
[root@jumpserver01 ~]# sar -b 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:18:06 tps rtps wtps bread/s bwrtn/s00:18:16 0.00 0.00 0.00 0.00 0.0000:18:26 0.00 0.00 0.00 0.00 0.0000:18:36 0.00 0.00 0.00 0.00 0.00Average: 0.00 0.00 0.00 0.00 0.00输出项说明:tps:每秒钟物理设备的 I/O 传输总量rtps:每秒钟从物理设备读入的数据总量wtps:每秒钟向物理设备写入的数据总量bread/s:每秒钟从物理设备读入的数据量,单位为 块/sbwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
6)进程队列长度和平均负载状态监控例如,每10秒采样一次,连续采样3次,监控进程队列长度和平均负载状态:
[root@jumpserver01 ~]# sar -q 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:19:25 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-1500:19:35 0 231 0.00 0.20 4.5000:19:45 0 231 0.00 0.19 4.4500:19:55 0 231 0.00 0.18 4.40Average: 0 231 0.00 0.19 4.45输出项说明:runq-sz:运行队列的长度(等待运行的进程数)plist-sz:进程列表中进程(processes)和线程(threads)的数量ldavg-1:最后1分钟的系统平均负载(System load average)ldavg-5:过去5分钟的系统平均负载ldavg-15:过去15分钟的系统平均负载
7)系统交换活动信息监控例如,每10秒采样一次,连续采样3次,监控系统交换活动信息:
[root@jumpserver01 ~]# sar -W 10 3Linux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:21:06 pswpin/s pswpout/s00:21:16 0.00 0.0000:21:26 0.00 0.0000:21:36 0.00 0.00Average: 0.00 0.00输出项说明:pswpin/s:每秒系统换入的交换页面(swap page)数量pswpout/s:每秒系统换出的交换页面(swap page)数量
8)设备使用情况监控例如,每10秒采样一次,连续采样3次,报告设备使用情况,需键入如下命令:
[root@jumpserver01 ~]# sar -d 10 3 -pLinux 2.6.32-696.el6.x86_64 (centos6-vm01) 01/04/18 _x86_64_ (4 CPU)00:24:26 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util00:24:36 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0000:24:36 vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0000:24:36 vg_centos6vm01-lv_root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0000:24:36 vg_centos6vm01-lv_swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0000:24:36 vg_centos6vm01-lv_home 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0其中:参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.rd_sec/s:每秒读扇区的次数.wr_sec/s:每秒写扇区的次数.avgrq-sz:平均每次设备I/O操作的数据大小(扇区).avgqu-sz:磁盘请求队列的平均长度.await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.%util:I/O请求占CPU的百分比,比率越大,说明越饱和.1)avgqu-sz 的值较低时,设备的利用率较高。2)当%util的值接近 1% 时,表示设备带宽已经占满。
要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来:1)怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看2)怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看3)怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
三、free
free命令用于检测物理内存和交换内存已使用量和可用量(默认单位为KB)[root@backup ~]# free -m //使用-m参数表示以兆字节为单位显示内存 total used free shared buffers cachedMem: 64181 44372 19809 3 12 216-/+ buffers/cache: 44143 20038Swap: 32767 0 32767第一部分Mem行解释:total:内存总数;used:已经使用的内存数;free:空闲的内存数;shared:当前已经废弃不用;buffers Buffer:缓存内存数;cached Page:缓存内存数。关系:total = used + free第二部分(-/+ buffers/cache)解释:(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。第三部分是指交换分区。---------------------------------------------------------------------------------------------以字节为单位显示内存加上-b参数的free命令,以字节为单位显示内存的大小。[root@backup ~]# free -b total used free shared buffers cachedMem: 67299549184 46525181952 20774367232 3272704 12820480 227033088-/+ buffers/cache: 46285328384 21014220800Swap: 34359734272 0 34359734272-------------------------------------------------------------------------------------------以千字节为单位显示内存加上-k参数的free命令(默认单位,所以可以不用使用它),以(KB)千字节为单位显示内存大小。[root@backup ~]# free -k total used free shared buffers cachedMem: 65722216 45435760 20286456 3196 12520 221712-/+ buffers/cache: 45201528 20520688Swap: 33554428 0 33554428-------------------------------------------------------------------------------------------以千兆字节为单位显示内存使用-g为参数,将会以GB(千兆字节)为单位显示内存大小。[root@backup ~]# free -g total used free shared buffers cachedMem: 62 43 19 0 0 0-/+ buffers/cache: 43 19Swap: 31 0 31------------------------------------------------------------------------------------------定期时间间隔更新内存状态-s选项加上一个整数,用来在定期时间间隔内更新free命令。举个例子,下面的命令将会在每5秒更新一个free命令。[root@backup ~]# free -s 5 total used free shared buffers cachedMem: 65722216 45436660 20285556 3196 12712 222096-/+ buffers/cache: 45201852 20520364Swap: 33554428 0 33554428 total used free shared buffers cachedMem: 65722216 45436592 20285624 3196 12720 222096-/+ buffers/cache: 45201776 20520440Swap: 33554428 0 33554428
四、mpstat(用于获取CPU相关统计信息)mpstat是 Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
mpstat的语法如下# mpstat [-P {cpu|ALL}] [internal [count]]其中,各参数含义如下:-P {cpu l ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值internal 相邻的两次采样的间隔时间count 采样的次数,count只能和delay一起使用[root@kevin ~]# yum install -y sysstat" #安装mpstat[root@kevin ~]# mpstat Linux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)02:28:57 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle02:28:57 PM all 0.17 0.00 0.15 0.32 0.00 0.00 0.01 0.00 99.36当mpstat不带参数时,输出为从系统启动以来的平均值。[root@kevin ~]# mpstat -P ALL Linux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)02:29:36 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle02:29:36 PM all 0.17 0.00 0.15 0.32 0.00 0.00 0.01 0.00 99.3602:29:36 PM 0 0.18 0.00 0.18 0.59 0.00 0.00 0.01 0.00 99.0402:29:36 PM 1 0.15 0.00 0.11 0.05 0.00 0.00 0.01 0.00 99.69每5秒产生一个报告,总共产生2个。[root@kevin ~]# mpstat -P ALL 5 2Linux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)02:30:27 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle02:30:32 PM all 0.20 0.00 0.40 0.51 0.00 0.00 0.00 0.00 98.8902:30:32 PM 0 0.20 0.00 0.80 0.80 0.00 0.00 0.00 0.00 98.2002:30:32 PM 1 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.5902:30:32 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle02:30:37 PM all 0.20 0.00 0.40 0.40 0.00 0.00 0.00 0.00 98.9902:30:37 PM 0 0.20 0.00 0.40 0.80 0.00 0.00 0.00 0.00 98.5902:30:37 PM 1 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.59Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idleAverage: all 0.20 0.00 0.40 0.45 0.00 0.00 0.00 0.00 98.94Average: 0 0.20 0.00 0.60 0.80 0.00 0.00 0.00 0.00 98.40Average: 1 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.59解释:%user 表示处理用户进程所使用 CPU 的百分比。%nice 表示使用 nice 命令对进程进行降级时 CPU 的百分比。nice 命令更改进程的优先级。 %system 表示内核进程使用的 CPU 百分比 %iowait 表示等待进行 I/O 所使用的 CPU 时间百分比 %irq 表示用于处理系统中断的 CPU 百分比 %soft 表示用于软件中断的 CPU 百分比 %idle 显示 CPU 的空闲时间
五、iostat(查看IO性能是否存在瓶颈)性能评估的一个主要部分就是磁盘性能,iostat 命令提供了存储接口的性能指标,iostat是查看Linux系统io是否存在瓶颈的一个命令。
安装iostat[root@kevin ~]# yum install -y sysstatiostat 主要有三个操作箱,options 操作项,interval指定统计时间间隔,count总共输出次数--------------------------------------c 参数,可以用来插卡部分cpu状态信息[root@kevin ~]# iostat -cLinux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.17 0.00 0.15 0.32 0.01 99.36-------------------------------------k 参数,某些使用block为单位的列强制使用Kilobytes为单位。如下,每1秒钟打印一次,打印2份。[root@kevin ~]# iostat -k 1 2Linux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.17 0.00 0.15 0.32 0.01 99.36Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnscd0 0.00 0.00 0.00 356 0vda 1.08 0.45 11.45 4340748 109945327dm-0 2.84 0.41 11.34 3907333 108884164dm-1 0.04 0.04 0.11 423580 1054548dm-2 0.00 0.00 0.00 1701 1084vdb 0.00 0.00 0.00 6671 10681avg-cpu: %user %nice %system %iowait %steal %idle 0.50 0.00 0.00 0.00 0.00 99.50Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnscd0 0.00 0.00 0.00 0 0vda 0.00 0.00 0.00 0 0dm-0 0.00 0.00 0.00 0 0dm-1 0.00 0.00 0.00 0 0dm-2 0.00 0.00 0.00 0 0vdb 0.00 0.00 0.00 0 0----------------------------------d 参数,显示设备(磁盘)使用状态[root@kevin ~]# iostat -d 1 2Linux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnscd0 0.00 0.00 0.00 712 0vda 1.08 0.90 22.89 8681496 219893230dm-0 2.84 0.81 22.67 7814666 217770904dm-1 0.04 0.09 0.22 847160 2109096dm-2 0.00 0.00 0.00 3402 2168vdb 0.00 0.00 0.00 13342 21363Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnscd0 0.00 0.00 0.00 0 0vda 7.00 0.00 208.00 0 208dm-0 26.00 0.00 208.00 0 208dm-1 0.00 0.00 0.00 0 0dm-2 0.00 0.00 0.00 0 0vdb 0.00 0.00 0.00 0 0==============================================================================解释:tps 每秒的传输数量,例如,每秒的 I/O 操作数。注:这只是 I/O 操作的数量;每个操作可能非常大,也可能非常小。Blk_read/s 每秒从该设备读取的块数。通常,块的大小为 512 字节。这是一个磁盘利用率较好的值。Blk_wrtn/s 每秒写入该设备的块数Blk_read 到目前为止从该设备读取的块数。注意,这并不是正在发生的情况。很多块已经从该设备读取。可能现在什么也没有读取。观察一段时间,看是否有变化。Blk_wrtn 写入该设备的块数。==============================================================================---------------------------------x 参数,输出更多详细信息[root@kevin ~]# iostat -x 1 2Linux 2.6.32-696.el6.x86_64 (ceph-node1) 07/02/2018 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.17 0.00 0.15 0.32 0.01 99.36Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %utilscd0 0.00 0.00 0.00 0.00 0.00 0.00 18.26 0.00 0.23 0.23 0.00 0.23 0.00vda 0.01 1.79 0.01 1.07 0.90 22.89 21.98 0.04 37.78 2.15 38.14 11.05 1.20dm-0 0.00 0.00 0.01 2.83 0.81 22.67 8.26 0.29 100.64 2.84 101.02 4.20 1.20dm-1 0.00 0.00 0.01 0.03 0.09 0.22 8.00 0.01 242.26 0.70 339.63 0.56 0.00dm-2 0.00 0.00 0.00 0.00 0.00 0.00 7.99 0.00 9.69 1.44 22.66 2.92 0.00vdb 0.00 0.00 0.00 0.00 0.00 0.00 21.33 0.00 1.10 0.29 15.04 1.05 0.00avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.50 9.55 0.00 89.95Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %utilscd0 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.00vda 0.00 26.00 0.00 7.00 0.00 264.00 37.71 0.34 49.00 0.00 49.00 37.71 26.40dm-0 0.00 0.00 0.00 33.00 0.00 264.00 8.00 1.15 34.94 0.00 34.94 8.00 26.40dm-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.00dm-2 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.00vdb 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==============================================================================解释一下 -x参数输出列意思rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;await:每一个IO请求的处理的平均时间(单位是毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。==============================================================================-----------------------------------iostat的常见用法# iostat -d -k 1 10 #查看TPS和吞吐量信息# iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)# iostat -c 1 10 #查看cpu状态使用实例1)查看指定磁盘吞吐量和速率[root@kevin ~]# iostat -d -d 1 1Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU)Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtnsda 0.14 0.08 3.31 1939830 83482716dm-0 0.42 0.07 3.30 1872538 83282120dm-1 0.00 0.00 0.00 39840 124112dm-2 0.00 0.00 0.00 2002 76424dm-3 0.00 0.01 0.00 254810 14320#从结果看到平均传输次数0.14,每秒读取0.08M,每秒写3.31M2)磁盘性能统计[root@kevin ~]# iostat -x -k 1 1Linux 2.6.32-573.el6.x86_64 (localhost) 06/30/2017 _x86_64_ (4 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.02 0.00 0.00 0.00 0.00 99.98Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilsda 0.00 0.27 0.00 0.14 0.04 1.65 23.78 0.00 0.31 1.51 0.29 0.16 0.00
命令格式:# vmstat (选项) (参数)选项-a:显示活动内页;-f:显示启动后创建的进程总数;-m:显示slab信息;-n:头信息仅显示一次;-s:以表格方式显示事件计数器和内存状态;-d:报告磁盘状态;-p:显示指定的硬盘分区状态;-S:输出信息的单位。参数事件间隔:状态信息刷新的时间间隔;次数:显示报告的次数。实例:[root@kevin ~]# vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 484628 215084 75336 523748 0 0 0 6 1 0 0 0 99 0 0 [root@kevin ~]# vmstat 3procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 482584 212000 75572 524464 0 0 0 6 1 0 0 0 99 0 0 1 0 482584 211984 75576 524468 0 0 0 31 1285 2485 0 0 99 1 0 0 0 482584 212124 75576 524484 0 0 0 7 1315 2586 0 0 99 0 0 0 0 482584 211844 75588 524496 0 0 0 56 1385 2614 2 1 96 1 0 0 0 482584 212108 75588 524504 0 0 0 0 1309 2556 0 0 100 0 0 0 0 482584 211920 75588 524512 0 0 0 92 1348 2616 1 0 98 1 0 0 0 482584 212124 75592 524516 0 0 0 29 1275 2483 0 0 98 2 0 0 0 482584 211984 75592 524528 0 0 0 4 1335 2593 1 0 99 0 0 字段说明:Procs(进程)r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)b: 等待IO的进程数量。Memory(内存)swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。free: 空闲物理内存大小。buff: 用作缓冲的内存大小。cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。Swapsi: 每秒从交换区写到内存的大小,由磁盘调入内存。so: 每秒写入交换区的内存大小,由内存调入磁盘。注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。IO(现在的Linux版本块的大小为1kb)bi: 每秒读取的块数bo: 每秒写入的块数注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。system(系统)in: 每秒中断数,包括时钟中断。cs: 每秒上下文切换数。注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。CPU(以百分比表示)us: 用户进程执行时间百分比(user time)us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。sy: 内核系统进程执行时间百分比(system time)sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。wa: IO等待时间百分比wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。id: 空闲时间百分比
发表评论
暂时没有评论,来抢沙发吧~