首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下性能调试工具-top和sar运维笔记

Linux下性能调试工具-top和sar运维笔记

作者头像
洗尽了浮华
发布2018-01-23 16:00:01
3.9K0
发布2018-01-23 16:00:01
举报
文章被收录于专栏:散尽浮华散尽浮华

作为一名资深的linux运维工程师,必须要熟练运用一些必要的系统性能调试工具,如top、sar工具。下面简单介绍下这几个工具的使用:

一、top top是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 -c
top - 15:41:05 up 38 days, 14 min,  4 users,  load average: 29.03, 29.03, 29.00
Tasks: 897 total,  30 running, 867 sleeping,   0 stopped,   0 zombie
Cpu(s): 71.8%us,  0.8%sy,  0.0%ni, 27.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65724264k total, 37654212k used, 28070052k free,   371320k buffers
Swap: 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的进程的资源使用情况,并显式该进程启动的命令行参数

二、sar sar(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 { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ] [ --legacy ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]

-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息

使用案例: 1)CPU资源监控 例如,每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中,需键入如下命令:

[root@jumpserver01 ~]# sar -u -o test 10 3
Linux 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     %idle
00:09:59        all      0.00      0.00      0.03      0.05      0.00     99.92
00:10:09        all      0.05      0.00      0.08      0.10      0.00     99.77
00:10:19        all      0.00      0.00      0.00      0.05      0.00     99.95
Average:        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 test
Linux 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     %idle
00:09:59        all      0.00      0.00      0.03      0.05      0.00     99.92
00:10:09        all      0.05      0.00      0.08      0.10      0.00     99.77
00:10:19        all      0.00      0.00      0.00      0.05      0.00     99.95
Average:        all      0.02      0.00      0.03      0.07      0.00     99.88

2)inode、文件和其他内核表监控 例如,每10秒采样一次,连续采样3次,观察核心表的状态,需键入如下命令:

[root@jumpserver01 ~]# sar -v 10 3
Linux 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-nr
00:13:27       106660       960     64780         2
00:13:37       106660       960     64780         2
00:13:47       106660       960     64780         2
Average:       106660       960     64780         2

输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量

3)内存和交换空间监控 例如,每10秒采样一次,连续采样3次,监控内存分页

[root@jumpserver01 ~]# sar -r 10 3
Linux 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   %commit
00:14:52       551360   5441372     90.80    142256   4907464    135520      1.12
00:15:02       551360   5441372     90.80    142256   4907464    135520      1.12
00:15:12       551360   5441372     90.80    142260   4907464    135520      1.12
Average:       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 3
Linux 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    %vmeff
00:16:39         0.00      0.40      7.21      0.00     12.61      0.00      0.00      0.00      0.00
00:16:49         0.00      0.00      4.30      0.00     12.60      0.00      0.00      0.00      0.00
00:16:59         0.00      0.00      3.40      0.00     12.20      0.00      0.00      0.00      0.00
Average:         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 3
Linux 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/s
00:18:16         0.00      0.00      0.00      0.00      0.00
00:18:26         0.00      0.00      0.00      0.00      0.00
00:18:36         0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00

输出项说明:
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s 

6)进程队列长度和平均负载状态监控 例如,每10秒采样一次,连续采样3次,监控进程队列长度和平均负载状态:

[root@jumpserver01 ~]# sar -q 10 3
Linux 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-15
00:19:35            0       231      0.00      0.20      4.50
00:19:45            0       231      0.00      0.19      4.45
00:19:55            0       231      0.00      0.18      4.40
Average:            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 3
Linux 2.6.32-696.el6.x86_64 (centos6-vm01)  01/04/18    _x86_64_    (4 CPU)

00:21:06     pswpin/s pswpout/s
00:21:16         0.00      0.00
00:21:26         0.00      0.00
00:21:36         0.00      0.00
Average:         0.00      0.00

输出项说明:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量

8)设备使用情况监控 例如,每10秒采样一次,连续采样3次,报告设备使用情况,需键入如下命令:

[root@jumpserver01 ~]# sar -d 10 3 -p
Linux 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     %util
00:24:36          sr0                   0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:24:36          vda                   0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:24:36    vg_centos6vm01-lv_root      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00:24:36    vg_centos6vm01-lv_swap      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
00: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-0
tps:每秒从物理磁盘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 等来查看

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档