Lyon

个人博客

授人以鱼,亦授人以渔.


Linux性能测试研究及工具使用

1.SAR

1.sar 命令行的常用格式:

sar [options] [-A] [-o file] t [n]

其中 t 和 n两个参数组合起来定义采样的时间和次数,t为采样间隔,是必须的参数,n为采样的参数。 -o file表示将命令的结果以二进制格式存放在文件中可以通过-f读出二进制文件的内容 options 是命令行参数

包括:

-A:所有报告的总和。
-u:CPU利用率
-v:进程、I节点、文件和锁表状态。
-d:硬盘使用报告。
-r:没有使用的内存页面和硬盘块。
-g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。

2.系统CPU监测

命令形式: sar -u t [n]  

显示内容:

%user 在用户模式中运行进程所花的时间
%nice 运行正常进程所花的时间, 如果一个程序在运行时用nice调整它的优先级,且优先级在1-19之间,并且是用户态的进程,这时%nice才会体现出来
%system 在内核模式(系统)中运行进程所花的时间
%iowait 没有进程在该CPU上执行时,处理器等待I/O完成的时间
%idle 没有进程在该CPU上执行的时间
%steal 一般在运行虚拟机的宿主机还用到,比如xen,QEMU,Bochs等等

可进行的性能分析

%iowait的值过高,表示硬盘存在I/O瓶颈
%idle的值较高,而系统较慢时,可能是内存容量不足,系统等待分配内容,如果%idle的值持续低于10%,则可能说明CPU的处理能力较低

用例简介

3.系统MEMORY监测

命令形式:

sar -r t [n]

显示内容:

%kbmemfree  空闲的内存大小
%kbmemused  内存的使用量大小
%memused    内存的使用量百分比
%kbbuffers  内存buffers大小
%kbcached   内存cached大小
%kbcommit   保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)
%swpused    swap使用量百分比
%commit     这个值是kbcommit与内存总量(包括swap)的一个百分比

可进行的性能分析: %memused,%kbbuffers,%kbcached三个参数可以表现出内存的性能.如果%memused的使用率很高,而%kbbuffers,%kbcached的较小时,显示当前的内存不足. 测试例子

4.网络设备监控

命令形式:

sar -n DEV t [n]

显示内容:

rxpck/s:每秒钟收到数据包的数量.
txpck/s:每秒钟发送数据包的数量.
rxkB/s:每秒钟接收的字节(KB).
txkB/s:每秒钟发送的字节(KB).
rxcmp/s:每秒收到的压缩包的数量
txcmp/s:每秒发出的压缩包的数量
rxmcst/s:每秒收到的广播包的数量

可进行的性能分析: rxpck/s,txpck/s,rxkB/s,txkB/s等等参数都可以用以显示网络状况。其中可通过将命令行中的DEV替换成EDEV,获取数据包得错误率,丢失率等。 测试例子:

命令形式:

sar –n SOCK t[n]

显示内容:

totsck:代表现在有多少个SOCKET连接,比如进行一次ssh连接,totsck将加1,同样断开连接相应的也会减少
tcpsck:代表现在有多少个处在监听状态的TCP套接字
udpsck:代表现在有多少个处在监听状态的UDP套接字.
rawsck:代表原始套接字,原始套接字可以接收本机网卡上的数据帧或者数据包,对于监听网络的流量和分析是很有作用的.
if-frag:代表IP分片次数
tcp-tw:代表TCP套接字处于TIME_WAIT的数量

可进行的性能测试: 通过totsck,tcpsck,udpsck,rawsck等反映当前的网络流量以及服务器的负载等情况。

5.I/O 传输率的监控

命令形式:

sar -b t [n]

显示内容:

tps     每秒钟物理设备的 I/O 请求数,是读请求与写请求的总和
rtps    每秒钟从物理设备读入的请求数
wtps    每秒钟向物理设备写入的请求数
bread/s 每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s 每秒钟向物理设备写入的数据量,单位为 块/s  

可获取的性能测试: 可以通过rtps,wtps反映出当前的读写请求数,显示文件的读写负载。bread/s,bwrtn/s显示物理设备的读写效率。同时sar -d t [n]命令还可以显示每个块物理设备的i/o情况。 例子测试:

2.Free

1.free 命令功能

free指令是linux操作系统上一个常用的内存查看指令,它会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

2.free命令语法格式

语法 : free [-bkmotv] [-s <间隔秒数]

参数:

-b 以Byte为单位显示内存的使用情况
-k 以KB为单位显示内容的使用情况
-m 以MB为单位显示内容的使用情况
-o 不显示缓冲区调节列
-s<间隔秒数> 持续观察内存的使用状况
-t  显示内存的总和列
-V 显示版本信息

free命令显示结果解析

bosco@bosco:~$ free total used free shared buffers cached Mem: 799004 693240 105764 0 151756 331004 -/+ buffers/cache: 210480 588524 Swap: 916472 0 916472

其中: Mem说明表示物理内存统计:

total: 表示物理内存的总量
used: 表示总计分配给缓冲使用的数量,其中分配的缓冲可能还没被使用
free : 表示未分配的内存
shared: 表示共享内存,一般系统不会用到
buffer::系统分配但未被使用的buffer数量
cached: 系统分配但未被使用的cached数量

关系: total= used+free

-/+buffers/cached表示物理内存的缓冲统计:

used: 指的是实际使用的内存总量,也就是被程序实际实实在在吃掉的内存 free: 指的是未被使用的buffers与cached和未被非分配的内存之和,这就是系统当前实际可用内存,实际可以挪用的内存总数

关系: used2=used1-buffers1-cached1 Free2=buffers1+cached1+free1

buffer与cache的关系

从运用程序的角度来看,对于应用程序来说,buffers/cached 是等价的,因为buffer/cached是为了提高文件读取的性能,当应用程序需要用到内存的时候,buffer/cached会很快的回收。所以从运用程序的角度来说,可用内存=系统free memory+buffers+cached.

Buffers: 是指用来给块设备的缓冲大小,他只记录文件的metadata以及tracking in-fight pages. Cached: 是用来给文件的缓冲区.

也就是说: Buffers是用来存目录里面的内容,权限等等;Cached直接用来记忆打开的文件。

3.Top

1.Top命令简介

Top命令式Linux下常用的性能分析工具,能够实习显示系统各个进程的资源占用状况,类似于Windows的任务管理器

2.Top命令作用

显示系统当前的进程和其他状况:top是一个动态显示过程,即可以通过用户按键来不 断刷新当前状态,如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 Top命令提供了实时的对系统处理器的状态监视,显示任务列表。该命令可以按CPU使用, 内存使用和执行时间对任务进行排序。

Top命令格式

   Top –[dpqcCSsn]

参数说明:

d 指定每两次刷屏信息之间的时间间隔
p 通过指定监控进程ID来见见监控某个进程的状态
q 使top没有任何延迟的进行更新
S 指定累计模式
s 使top命令在安全模式中运行
i 使top不显示任何闲置或者僵死的进程

2.Top信息显示

统计信息区

第一行是任务队列信息,其内容如下:

当前时间
系统运行时间
当前登录的用户数
1分钟,5分钟,15分钟内的任务队列的平均长度

第二行和第三行为进程和CPU的信息

进程总数
正在运行的进程数
睡眠的进程数
已停止的进程数
僵尸进程数
用户空间占用CPU百分比
内核空间占用CPU百分比
用户进程空间内改变过优先级的进程占用CPU百分比
空闲CPU百分比
等待输入输出的CPU时间百分比

最后两行为内存信息

物理内存总量
使用的物理内存总量
空闲内存总量
用作内核缓存的内存量
交换区总量
使用的交换区总量
空闲交换区总量
缓冲的交换区总量

进程信息区

位于统计信息区域的下方,用来显示各个进程的详细信息。
PID:进程id
USER:进程所有者的用户名
PR:优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb
RES:进程使用的、未被换出的物理内存大小
SHR:共享内存大小,单位kb
S:进程状态
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计
COMMAND:命令名/命令行

5.交互命令

Ctrl+L: 擦除并且重写屏幕
h: 或者? 显示帮助画面,给出一些简短的命令总结说明
k: 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号
i: 忽略闲置和僵死进程。
q: 退出程序
r: 重新安排一个进程的优先级别
S: 切换到累计模式
s: 改变两次刷新之间的延迟时间
f或者F: 从当前显示中添加或者删除项目
o或者O: 改变显示项目的顺序
l: 切换显示平均负载和启动时间信息
m: 切换显示内存信息
t: 切换显示进程和CPU状态信息
c: 切换显示命令名称和完整命令行
M: 根据驻留内存大小进行排序
P: 根据CPU使用百分比大小进行排序。
T: 根据时间/累计时间进行排序

4.Iostat

简介

iostat 命令可以显示 CPU 和 I/O 系统的负载情况及分区状态信息

命令格式

iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ][ device [...] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ]]

其中各参数说明:

-c : 仅显示 CPU 统计信息。与 -d 选项互斥
-d : 仅显示磁盘统计信息。与 -c 选项互斥
-k:  以 K 为单位显示每秒的磁盘请求数
-p device | ALL:与 -x 选项互斥,用于显示块设备及系统分区的统计信息
-t : 在输出数据时,打印收集数据的时间
-V :打印版本号和帮助信息
-x: 输出扩展信息

命令输出项目说明

avg-cpu 段:

%user:  在用户级别运行所使用 CPU 的百分比。
%nice:  nice 操作所使用 CPU 的百分比。
%sys: 在系统级别(kernel)运行所使用 CPU 的百分比。
%iowait: CPU等待硬件 I/O 时,所占用 CPU 百分比。
%idle:  CPU 空闲时间的百分比。

Device段:

tps:每秒钟发送到的 I/O 请求数
Blk_read/s:每秒读取的 block 数
Blk_wrtn/s:每秒写入的 block 数
Blk_read:读入的 block 总数
Blk_wrtn:写入的 block 总数

额外扩展段:

kB_read/s  每秒从驱动器读入的数据量,单位为 K。
kB_wrtn/s  每秒向驱动器写入的数据量,单位为 K。
kB_read  读入的数据总量,单位为 K。
kB_wrtn  写入的数据总量,单位为 K。
wrqm/s  将写入请求合并后,每秒发送到设备的写入请求数。
r/s  每秒发送到设备的读入请求数。
w/s  每秒发送到设备的写入请求数。
rsec/s  每秒从设备读入的扇区数。
wsec/s  每秒向设备写入的扇区数。
rkB/s  每秒从设备读入的数据量,单位为 K。
wkB/s  每秒向设备写入的数据量,单位为 K。
avgrq-sz  发送到设备的请求的平均大小,单位是 扇区。
avgqu-sz  发送到设备的请求的平均队列长度。
await  I/O 请求平均执行时间,包括发送请求和执行的时间。单位是 毫秒。
svctm  发送到设备的 I/O 请求的平均执行时间。单位是 毫秒。
%util  在 I/O 请求发送到设备期间,占用 CPU 时间的百分比。用于显示设备的带宽利用率。当这个值接近 100% 时,表示设备带宽已经占满。

基本使用

    $iostat -d -k 1 10
    参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。
$iostat -d -x -k 1 10 获取设备更详细的信息

本文只是简述,详细讨论可以联系我,资料仅供学习参考!