stress工具
stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。
安装: sudo yum install stress
命令的使用:
-
-c, --cpu N:产生N个进程,每个进程都循环调用sqrt函数产生CPU压力。
-
-i, --io N:产生N个进程,每个进程循环调用sync将内存缓冲区内容写到磁盘上,产生IO压力。通过系统调用sync刷新内存缓冲区数据到磁盘中,以确保同步。如果缓冲区内数据较少,写到磁盘中的数据也较少,不会产生IO压力。在SSD磁盘环境中尤为明显,很可能iowait总是0,却因为大量调用系统调用sync,导致系统CPU使用率sys 升高。
-
-m, --vm N:产生N个进程,每个进程循环调用malloc/free函数分配和释放内存。
–vm-bytes B:指定分配内存的大小
–vm-stride B:不断的给部分内存赋值,让COW(Copy On Write)发生
–vm-hang N :指示每个消耗内存的进程在分配到内存后转入睡眠状态N秒,然后释放内存,一直重复执行这个过程
–vm-keep:一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存) -
-d, --hdd N:产生N个不断执行write和unlink函数的进程(创建文件,写入内容,删除文件)
–hdd-bytes B:指定文件大小 -
–hdd-noclean:不要将写入随机ASCII数据的文件Unlink
-
-t, --timeout N:在N秒后结束程序
-
–backoff N:等待N微秒后开始运行
-
-q, --quiet:程序在运行的过程中不输出信息
-
-n, --dry-run:输出程序会做什么而并不实际执行相关的操作
-
–version:显示版本号
-
-v, --verbose:显示详细的信息
例如:
CPU测试
stress --cpu 2 --timeout 60
IO测试:
stress --io 2 --timeout 60s
Memory测试
stress --vm 2 --vm-bytes 1G --vm-hang 100 --timeout 100s
sysbench工具
sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:
sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试。sysbench 支持的测试有CPU运算性能测试、内存分配及传输速度测试、磁盘IO性能测试、POSIX线程性能测试、互斥性测试测试、数据库性能测试(OLTP基准测试)。目前支持的数据库主要是MySQL数据库和PG数据库。
yum -y install sysbench
可以进行一定的数据库的压测/
基本语法:
sysbench [options]… [testname] [command]
comman是sysbench要执行的命令,包括:
prepare: 是为了测试提前准备的数据
run: 执行正式的测试
cleanup: 是在测试完成后对数据库进行清理.
常用于数据库的压测使用:
使用的命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
上面构造的一个sysbench命令,大致参数的含义:
- –db-driver=mysql:这个很简单,就是说他基于mysql的驱动去连接mysql数据库,你要是oracle,或者sqlserver,那自然就是其他的数据库的驱动了
- –time=300:这个就是说连续访问300秒
- –threads=10:这个就是说用10个线程模拟并发访问
- –report-interval=1:这个就是说每隔1秒输出一下压测情况
- –mysql-host=127.0.0.1–mysql-port=3306–mysql-user=test user–mysql-password=test user: 这一大串, 就是说连接到哪台机器的哪个端口上的MySQL库,他的用户名和密码是什么
- -mysql-db=test db–tables=20–table size=1000000:这一串的意思,就是说在test db这个库里,构造20个测试表,每个测试表里构造100万条测试数据,测试表的名字会是类似于sbtest1,sbtest2这个样子的
- oltp_read_write:这个就是说,执行oltp数据库的读写测试
- —db-ps-mode=disable:这个就是禁止ps模式
最后有一个prepare,意思是参照这个命令的设置去构造出来我们需要的数据库里的数据,他会自动创建20个测试表,每个表
里认建100万条测试数据,所以这个工具是非常的方便的。
ab工具:
ab是Apache超文本传输协议(HTTP)的性能测试工具。它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
原理:
ab命令创建多个并发访问的线程,模拟多个访问者同时对某个url地址进行访问,
使用:
简单用法:
ab -n 100 -c 10 http://127.0.0.1:8080/
如果需要携带参数,发送post请求,要把参数存到一个文件里,这个文件没有扩展名,使用-p指定
ab -n 2000 -c 200 -k -p ~/postfile -T application/x-www-form-urlencoded http://127.0.0.1:8080/test
hping3
该工具用于模拟DDOS网络攻击的工具:
端口扫描:
hping3 -I eth1 -S 192.168.180.133 -p 80
syn Flood
默认协议: tcp
默认源端口: 随机
通过ens33 网卡发送syn报文到目标主机,并伪造随机源地址.时间间隔1000us
hping3 -I ens33 -S 192.168.44.11 -p 80 --rand-source -i -u1000
UDP Flood:
发送udp报文到目标地址,伪造源ip,洪水攻击.
sudo hping3 --udp 192.168.180.133 -p 80 --rand-source --flood
sudo hping3 --udp -s 6666 -p 53 -a 29.29.29.29 --flood 192.168.180.133
ICMP Flood:
发送icmp报文:
sudo hping3 --icmp 192.168.180.133 --rand-source --flood
sudo hping3 -q -n -d 200 --icmp --flood -a 28.28.28.28 192.168.180.133
参考文档: https://www.cnblogs.com/Higgerw/p/16469371.html
strace
strace是跟踪进程执行时的系统调用所接收的信号,他会跟踪一个进程产生的系统调用,包括参数,返回值,执行消耗的时间,
基本使用:
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
使用: strace 进程名 或者 strace -p pid
能够更加精准的定位出程序中出错的位置.
perf
性能分析工具,能够进行函数级和指令级别的热点查找,用来分析程序中的热点函数的cpu占用率.
主要使用:
perf record : 保存perf追踪的内容,文件名为perf.data
perf report : 解析perf.data
perf record -a --call-graph dwarf -p pid
-a : 表示对所有的cpu采样
–call-graph dward: 表示分析调用栈的关系,
-p 指定分析的进程
结束跟踪会后,生成报文文件,然后执行命令
perf report -i perf.data > perf.txt
然后分析报告,就可以看到cpu使用率高的几个函数,然后根据函数内容确定优化方案.
memleak
专门用来检测内存泄漏的工具,
memleak 可以跟踪系统或指定进程的内存分配,释放请求,然后定期输出一个未释放内存和相应调用栈的汇总情况.(默认5秒)
fio
是在Linux下使用的方便的io测试工具.
安装: yum -y install fio
常用的一些参数:
filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb
direct=1 测试过程绕过机器自带的buffer,使测试结果更真实
rw=randwread 测试随机读的I/O
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机混合写和读的I/O
rw=read 测试顺序读的I/O
rw=write 测试顺序写的I/O
rw=rw 测试顺序混合写和读的I/O
bs=4k 单次io的块文件大小为4k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试
numjobs=30 本次的测试线程为30
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息
此外
lockmem=1g 只使用1g内存进行测试
zero_buffers 用0初始化系统buffer
nrfiles=8 每个进程生成文件的数量
测试场景:
100%随机,100%读, 4K fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
100%随机,100%写, 4K fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
100%顺序,100%读 ,4K fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
100%顺序,100%写 ,4K fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
100%随机,70%读,30%写 4K fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k
pktgen
pktgen是一个位于linux内核层的高性能网络测试工具,主要用来测试网络驱动与网卡设备,支持多线程,能够产生随机mac地址、IP地址、UDP端口号的数据包,pktgen 的作者使用多CPU处理器在不同的PCI总线(pci 、pcie等总线)上用千兆以太网卡做过测试(pktgen的表现依赖于CPU处理速率、内存延时、pci总线速率等硬件参数),发送数据速率甚至可以大于10GBit/s。可见是可以满足大多数的网卡等测试需求。
现在版本的linux发行版大多加入了pktgen,使用以下命令加载pktgen模块
modprobe pktgen