0


Linux性能测试工具 stress,stress-ng,sysbench,fio以及检测dstat

一、什么是dstat?

通过man帮助,可以看到官方对dstat的定义为:多功能系统资源统计生成工具( versatile tool for generating system resource statistics)。在获取的信息上有点类似于top、free、iostat、vmstat等多个工具的合集,官方解释为vmstat、iostat、ifstat等工具的多功能替代品,且添加了许多额外的功能(Dstat is a versatile replacement for vmstat, iostat and ifstat. Dstat overcomes some of the limitations and adds some extra features.);其结果可以保持到csv文件,使用脚本或第三方工具对性能进行分析利用(如通过监控平台监控,也可以保持到数据库)。在Centos 6.x系统上安装基本服务器即默认安装,而在其他操作系统可能需要手动安装。

二、dstat的基本使用:

2.1 dstat的默认选项

与许多命令一样,dstat命令有默认选项,执行dstat命令不加任何参数,它默认会收集-cpu-、-disk-、-net-、-paging-、-system-的数据,一秒钟收集一次。 默认输入 dstat 等于输入了dstat -cdngy 1或dstat -a 1。

2.2 dstat的常用选项:

dstat的用法如下:

dstat [-afv] [options..] [delay [count]]

使用 dstat -h查看全部选项,这里不逐一列举,下面简单介绍下常用选项

常用选项如下:

直接跟数字,表示#秒收集一次数据,默认为一秒;dstat 5表示5秒更新一次

-c,--cpu 统计CPU状态,包括 user, system, idle(空闲等待时间百分比), wait(等待磁盘IO), hardware interrupt(硬件中断), software interrupt(软件中断)等;

-d, --disk 统计磁盘读写状态

-D total,sda 统计指定磁盘或汇总信息

-l, --load 统计系统负载情况,包括1分钟、5分钟、15分钟平均值

-m, --mem 统计系统物理内存使用情况,包括used, buffers, cache, free

-s, --swap 统计swap已使用和剩余量

-n, --net 统计网络使用情况,包括接收和发送数据

-N eth1,total 统计eth1接口汇总流量

-r, --io 统计I/O请求,包括读写请求

-p, --proc 统计进程信息,包括runnable、uninterruptible、new

-y, --sys 统计系统信息,包括中断、上下文切换

-t 显示统计时时间,对分析历史数据非常有用

--fs 统计文件打开数和inodes数

以上这些就是最常用的选项,而一般都组合使用,个人比较常用的是:

  • dstat -cmsdnl -D sda9 -N lo,etho 100 5

三、监测界面各参数含义(部分)

Procs

  • r:运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)

  • b:处于不可中断状态的进程数,常见的情况是由IO引起的

Memory

  • swpd: 切换到交换内存上的内存(默认以KB为单位)。如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。

  • free: 空闲的物理内存

  • buff: 作为buffer cache的内存,对块设备的读写进行缓冲

  • cache: 作为page cache的内存, 文件系统的cache。如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。

Swap

  • si: 交换内存使用,由磁盘调入内存

  • so: 交换内存使用,由内存调入磁盘

内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。

我发现有些朋友看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

磁盘IO

  • bi: 从块设备读入的数据总量(读磁盘) (KB/s)

  • bo: 写入到块设备的数据总理(写磁盘) (KB/s)

注:随机磁盘读写的时候,这2个 值越大(如超出1M),能看到CPU在IO等待的值也会越大

System

  • in: 每秒产生的中断次数

  • cs: 每秒产生的上下文切换次数

上面这2个值越大,会看到由内核消耗的CPU时间会越多

Cpu

  • usr: 用户进程消耗的CPU时间百分比

us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了(比如 PHP/Perl)

  • sys: 内核进程消耗的CPU时间百分比

sys 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。

  • wai: IO等待消耗的CPU时间百分比

wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

  • idl: CPU处在空闲状态时间百分比

四、dstat的高级用法

dstat的功能非常强大,除了上述常用用法外,还有一些大家不常用的高级用法,如下:

3.1 找出占用资源最高的进程和用户

--top-(io|bio|cpu|cputime|cputime-avg|mem) 通过这几个选项,可以看到具体是那个用户那个进程占用了相关系统资源,对系统调优非常有效。如查看当前占用I/O、cpu、内存等最高的进程信息可以使用dstat --top-mem --top-io --top-cpu:

3.2 获取其他应用信息:

dstat除了可以获取系统关键信息外,还可以获取其他应用信息,如通过下列选项,可以获取到其他一些常用应用信息:

--postfix 显示postfix队列大小

--sendmail 显示sendmail队列大小

--ntp 显示ntp服务器时间

--nfs3 获取nfs客户端信息

--nfsd3 获取nfs服务器信息,不过nfs服务器版本需为第三版才可以,该选项还有更多用法,可以参考man帮助获取

--mysql5-(cmds|conn|io|keys ) 获取mysql5相关信息

==========================================================

一、FIO工具安装:

1、rpm –qa|grep fio
2、源码安装(2、3、4任选一个,推荐方法:3、rpm 的二进制安装)

官网地址:http://freecode.com/projects/fio/
github地址:https://github.com/axboe/fio

wget https://github.com/axboe/fio/archive/refs/tags/fio-3.14.tar.gz
tar -zxvf fio-3.14.tar.gz
./configure
make
make install

如果未成功就用 rpm 安装 (推荐)

  • 官网地址:https://pkgs.org/download/fio
  • wget http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpmyum install libaio-develyum install libibverbs -yyum install libpmem -yyum install librados2 -yyum install librbd1rpm -ivh fio-3.7-2.el7.x86_64.rpm``````yum install fio

二、FIO工具使用方法

参数说明:

  • -rw=randwrite:定义测试时的读写策略,可选值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw0
  • -ioengine=libaio:libaio指的是异步模式,如果是同步就要用sync。定义fio如何下发IO请求,通常有同步IO和异步IO:同步IO一次只能发出一个IO请求, 等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。异步IO则通常使用libaio这样的方式一次提交一批IO 请求,然后等待一批的完成,减少交互的次 数,会更有效率
  • -direct=1:定义是否使用direct IO,可选值如下:值为0,表示使用buffered IO;值为1,表示使用 direct IO
  • -thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。
  • –numjobs=1:定义测试的并发线程数
  • -iodepth=64:定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度, 如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的IO并发数 =iodepth * numjobs。
  • -filename:定义测试文件(设备)的名称。此处选择文件,则代表测试文件系统的性能,例如:- filename=/opt/fiotest/fiotest.txt;此处选择设备名称,则代表测试裸盘的性能,例:-filename=/dev/vdb1
  1.     如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意
    
     filename选择指定文件,以避免覆盖文件系统和原有数据。
    
  • -size=100M:定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位的数字,比如size=10G,表示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。建议测试数据量为内存两倍大,尽量避免缓存影响。
  • -name=job1:定义测试任务名称。
  • -bs=4k:定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。
  • –output TestResult.log:日志输出到TestResult.log。
  • -runtime:定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。
  • -group_reporting:定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同 job汇总展示信息

其它信息:

  • lockmem=1g 只使用1g内存进行测试。
  • zero_buffers 用0初始化系统buffer。
  • nrfiles=8 每个进程生成文件的数量。

磁盘读写常用测试点:

  • Read=100% Ramdon=100% rw=randread (100%随机读)
  • Read=100% Sequence=100% rw=read (100%顺序读)
  • Write=100% Sequence=100% rw=write (100%顺序写)
  • Write=100% Ramdon=100% rw=randwrite (100%随机写)
  • Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30

(70%顺序读,30%顺序写)

  • Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30

(70%随机读,30%随机写)

每次测试前执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存。
-ioengine=libaio、-iodepth=32可选/可不选

1)顺序写:

fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=4M -size=128G -numjobs=1  -runtime=600 -group_reporting -filename=/dev/[device] -name=Write_BandWidth_Test

2)随机写:

fio -direct=1-iodepth=128 -rw=randwrite -ioengine=libaio -bs=4K -size=128G - numjobs=1 -runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Write_IOPS_Test

3)顺序读:

fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=4M -size=128G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/[device] -name=Read_BandWidth_Test

4)随机读:

fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4K -size=128G - numjobs=1 -runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Read_IOPS_Test

5)混合随机读写:

========================================================

【性能】Linux性能测试工具 - 简书

stress是一个linux系统压力测试工具,顾名思义主要用来进行压力测试

yum -y install stress

# yum info stress

sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有 利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。

stress和sysbench两个工具在压测过程中的对比发现:

stress基于多进程的,会fork多个进程,导致进程上下文切换,导致us开销很高

sysbench基于多线程的,会创建多个线程,单一进程基于内核线程切换,导致sys的内核开销很高

stress-ng简介

1、stress-ng简介
stress-ng完全兼容stress, 并且在stress基础上增加数百个选项参数,支持产生各种复杂的压力。

2、stress-ng安装
stress-ng源码下载:

https://kernel.ubuntu.com/~cking/tarballs/stress-ng/

编译:

make

安装:

sudo make install

==========================================

DB 压力测试工具之 sysbench

DB 压力测试工具之 sysbench - 知乎

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/Michaelwubo/article/details/127767524
版权归原作者 Michaelwubo 所有, 如有侵权,请联系我们删除。

“Linux性能测试工具 stress,stress-ng,sysbench,fio以及检测dstat”的评论:

还没有评论