0%

Linux性能分析命令

Top

top命令可以实时的动态的查看系统整体的运行状况,提供了CPU、内存、进程等资源信息。

参数选项

  • -b:以批处理模式操作
  • -c:显示完整的命令
  • -d:刷新间隔时间
  • -I:忽略失效进程
  • -s:保密模式
  • -S:累积模式
  • -i<time>:设置间隔时间
  • -u<user>:指定用户名
  • -p<process>:指定进程
  • -n<number>:循环显示的次数

交互命令

  • 1:显示CPU详细信息
  • d:修改刷新频率,单位为秒
  • h:查看帮助
  • n:指定进程列表显示的行数
  • q:退出top命令
  • l:隐藏/显示第一行
  • t:隐藏/显示第二行和第三行
  • m:隐藏/显示第四行和第五行内存信息
  • M:根据驻留内存大小进行排序
  • P:根据CPU使用百分比大小进行排序
  • T:根据时间进行排序
  • k:杀死一个进程
  • i:忽略空闲进程和僵死进程
  • r:重新规划进程的优先级别
  • f:从当前显示中添加或者删除项目

Linux_top

top命令主要分为两个区域:统计信息和进程信息。统计信息为前五行,主要显示系统负载情况、进程情况、 CPU情况、MEM内存情况、SWAP交换分区情况。进程信息主要显示每个进程具体信息,默认五秒刷新一次。

第一行:
系统当前时间为9:23:14
系统运行时间为60天
当前登录的用户数为1
系统负载,即任务队列的平均长度。3个数值分别统计最近1,5,15分钟的系统平均负载

  • 系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
  • 多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。

第二行:
进程总数为93
活动的进程数为1
休眠的进程数为92
停止的进程数为0
僵死的进程数位0

第三行:
用户空间占用CPU百分比为0.3%
内核空间占用CPU百分比为0.2%
用户进程空间内改变过优先级的进程占用CPU百分比为0%
空闲CPU百分比为99.1%
等待占用CPU百分比为0.4%
CPU服务于硬件中断所耗费的时间总额为0%
CPU服务软中断所耗费的时间总额为0%
虚拟机被hypervisor偷去的CPU时间为0%

第四行:
物理内存总量为1922268k
已使用的物理内存总量为1647380k
空闲的内存总量为274888k
缓存到BUFFER中的内存总量为222392k

第五行:
交换分区的总量为0k
已使用的交换分区总量为0k
空闲的交换分区总量为0k
缓存的交换分区总量为1138584k

进程信息:
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秒

VMSTAT

vmstat命令可以报告关于进程、内存、I/O等系统整体运行状态
参数选项

  • -a:显示活动内页
  • -f:显示启动后创建的进程总数
  • -m:显示slab的信息
  • -n:头信息仅显示一次
  • -s:以表格方式显示事件计数器和内存状态
  • -d:报告磁盘状态
  • -p:显示指定的磁盘分区状态
  • -s:输出信息的单位
1
2
3
4
5
6
7
8
# vmstat 3 5
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 0 264820 222404 1142304 0 0 0 14 3 4 0 0 99 0 0
0 0 0 264788 222404 1142304 0 0 0 20 91 152 0 0 99 1 0
0 0 0 264812 222404 1142304 0 0 0 0 58 97 0 0 100 0 0
0 0 0 264804 222404 1142308 0 0 0 23 93 156 0 0 99 1 0
0 0 0 264804 222404 1142312 0 0 0 4 104 176 1 0 99 0 0

字段说明
Procs(进程)

  • r:运行队列中进程数量
  • b:等待IO的进程数量

Memory(内存)

  • swpd:使用虚拟内存大小
  • free:空闲物理内存
  • buff:用作缓冲的内存大小
  • cache:用作缓存的内存大小

Swap(交换分区)

  • si:每秒从交换区写到内存的大小,由磁盘调入内存
  • so:每秒写入交换区的内存大小,由内存调入磁盘

IO

  • bi:每秒读取的块数
  • bo:每秒写入的块数

system

  • in:每秒中断数,包括时钟中断
  • cs:每秒上下文切换数

CPU

  • us:用户进程执行时间百分比
  • sy:内核系统进程执行时间百分比
  • wa:IO等待时间百分比
  • id:空闲时间百分比

SAR

sar(System Activity Reporter)可以报告系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动等信息。

1
2
3
4
5
6
7
8
9
sar [选项] [时间间隔] [次数]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -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> ] ]

查看CPU

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# sar -u
Linux 2.6.32-431.el6.x86_64 (OGG) 06/20/2018 _x86_64_ (1 CPU)

12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 0.74 0.00 0.63 13.99 0.00 84.63
12:20:01 AM all 0.34 0.00 0.39 16.03 0.00 83.24
12:30:01 AM all 0.30 0.00 0.41 15.04 0.00 84.25
12:40:01 AM all 0.31 0.00 0.39 14.27 0.00 85.03
12:50:01 AM all 0.30 0.00 0.38 14.85 0.00 84.48
01:00:01 AM all 0.27 0.00 0.31 11.93 0.00 87.49
01:10:01 AM all 0.66 0.00 0.49 12.86 0.00 85.99
01:20:01 AM all 0.33 0.00 0.40 14.99 0.00 84.28
01:30:01 AM all 0.31 0.00 0.38 13.55 0.00 85.76
01:40:01 AM all 0.30 0.00 0.36 16.53 0.00 82.80
01:50:03 AM all 0.32 0.00 0.37 14.22 0.00 85.09
02:00:01 AM all 0.34 0.00 0.42 13.35 0.00 85.88
02:10:01 AM all 0.58 0.00 0.47 16.77 0.00 82.18
02:20:01 AM all 0.30 0.00 0.37 14.53 0.00 84.80
02:30:01 AM all 0.28 0.00 0.36 14.41 0.00 84.95
Average: all 0.38 0.00 0.41 14.49 0.00 84.73

07:03:46 PM LINUX RESTART

查看IO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# sar -b
Linux 2.6.32-431.el6.x86_64 (OGG) 06/20/2018 _x86_64_ (1 CPU)

12:00:01 AM tps rtps wtps bread/s bwrtn/s
12:10:01 AM 10.85 0.89 9.96 37.63 118.43
12:20:01 AM 6.67 0.07 6.61 0.53 77.09
12:30:01 AM 6.34 0.05 6.29 0.42 73.14
12:40:01 AM 6.33 0.06 6.27 0.47 72.38
12:50:01 AM 6.20 0.06 6.14 0.47 71.29
01:00:01 AM 5.99 0.06 5.94 0.47 69.03
01:10:01 AM 9.80 0.34 9.45 6.27 112.46
01:20:01 AM 6.55 0.06 6.49 0.50 76.44
01:30:01 AM 6.17 0.05 6.12 0.42 70.56
01:40:01 AM 6.43 0.09 6.34 0.72 72.71
01:50:03 AM 6.16 0.06 6.10 0.44 70.67
02:00:01 AM 6.40 0.06 6.34 0.50 73.16
02:10:01 AM 9.11 0.18 8.93 1.79 106.91
02:20:01 AM 6.15 0.06 6.09 0.44 70.96
02:30:01 AM 6.32 0.09 6.23 0.69 72.53
Average: 7.02 0.14 6.87 3.36 80.36

07:03:46 PM LINUX RESTART

查看内存和交换分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# sar -r
Linux 2.6.32-431.el6.x86_64 (OGG) 06/20/2018 _x86_64_ (1 CPU)

12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
12:10:01 AM 645304 1262276 66.17 36340 931012 939764 15.65
12:20:01 AM 649164 1258416 65.97 37136 931888 925580 15.42
12:30:01 AM 643832 1263748 66.25 37924 932328 933880 15.56
12:40:01 AM 639848 1267732 66.46 38712 932736 941116 15.68
12:50:01 AM 638700 1268880 66.52 39504 933104 941220 15.68
01:00:01 AM 637492 1270088 66.58 40280 933504 941256 15.68
01:10:01 AM 621440 1286140 67.42 41084 942484 961356 16.01
01:20:01 AM 625836 1281744 67.19 41880 943328 947140 15.78
01:30:01 AM 631308 1276272 66.91 42664 943612 931980 15.52
01:40:01 AM 630036 1277544 66.97 43452 944032 932076 15.53
01:50:03 AM 628952 1278628 67.03 44248 944388 932180 15.53
02:00:01 AM 608708 1298872 68.09 45032 944760 950768 15.84
02:10:01 AM 623620 1283960 67.31 45828 948248 933196 15.54
02:20:01 AM 618280 1289300 67.59 46620 948664 941428 15.68
02:30:01 AM 616884 1290696 67.66 47504 949104 941548 15.68
Average: 630627 1276953 66.94 41881 940213 939633 15.65

07:03:46 PM LINUX RESTART

查看网络设备状态统计信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@OGG ~]# sar -n EDEV |egrep 'eth0|IFACE'
12:00:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
12:10:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:40:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:50:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:00:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:10:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:20:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:30:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:40:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:50:03 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:00:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:10:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:20:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:30:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

DD

dd命令用于复制文件并对原文件的内容进行转换和格式化处理。

1
2
3
4
5
6
7
8
9
10
11
12
dd [选项]
Options are:
[if]:输入文件名
[of]:输出文件名
[ibs]:每次读取的字节数
[obs]:每次输出的字节数
[bs]:同时设置读入/输出的块大小为bytes个字节
[cbs]:一次转换bytes个字节,即指定转换缓冲区大小
[conv]:指定文件转换的方式
[count]:仅读取指定的块数
[seek]:一开始输出时,跳过指定的块数
[skip]:一开始输入时,跳过指定的块数

测试磁盘写速度

1
time dd if=/dev/zero bs=8k count=1000 of=test.file

测试磁盘读速度

1
time dd if=test.file bs=64k dd of=/dev/null