性能测试工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能测试工具相关的知识,希望对你有一定的参考价值。

2015.8.7

横向扩展能力
数据库的优化
尽量让一台机器能够承载更多的用户请求
 
性能测试就是通过技术的手段模拟大量用户同时访问被测应用,观察记录和分析系统的各项性能指标的过程。
性能测试的目标是评估系统的性能瓶颈,预测系统的最大用户负载能力
 
模拟大量并发用户
监控系统负载参数分析系统瓶颈
 
平均响应时间(TTLB,time 头laster byte)
合理的平均响应时间  2/5/10原则(最佳2秒,可以接受5秒,不能接受10秒)
性能指标--系统资源类
 
CPU的占用率(CPU)
内存的占用率,换页数等(内存)
读写请求数,读写量(I/O)
进站出站带宽占用率(带宽)
 
负载测试(Load Test)
    为了验证系统设计符合正常业务负载情况下系统性能的测试
压力测试(Stress Test)
    为了验证系统在极端负载情况下的性能表现的测试
 
 
sysstat(性能测试工具)
使用putty进入命令行安装sysstat
    1.yum list sysstat查看是否安装(有installed或中文表示已安装)
    2.若没有安装输入 yum install sysstall.x86_64(这个是会在上个命令中显示的)
    3.在同第一步
输入 cat /etc/cron.d/sysstat进入sysstat的配置文件,其中表示10分钟执行一次命令(正常开发的时候需要将其改为1分钟,方便测试)每10分钟获取一次系统性能信息,每天23.53分有个总结报告
使用 cd /var/log/sa进入日志文件路径再输入 ls查看该目录文件便可看到日志文件
 
sysstat常用命令之CPU监控
CUP任务数
技术分享
命令为:sar -q -f sa07(这是日志文件) 
runq-sz:Run queue length  等待执行的任务队列长度,越长阻塞越严重
plist-sz:队列中的任务总数
ldavg-1(5,15):一分钟,五分钟、15分钟内系统负载描述,值是通过执行中的任务和等待执行的任务的个数的平均值得到的。当该值很大的时候代表的是cpu负载很大。使用top查看cpu占用最高的
 
CPU占用百分比
技术分享
命令为:sar -p -f sa07(这是日志文件) 
PRI:进程优先权,代表这个进程可被执行的优先级,其值越小,优先级越高,越早被执行
NI:进程NICE值,进程可被执行的优先级的修正值
PRI(new)=PRI(old)+nice
%nice:改过优先级的进程CPU占用率
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待CPU的百分比(等待CPU)该值越高代表CPU任务繁重程度越大
%iowait:IO请求等待百分比,该值越大代表IO任务繁重,磁盘读写任务多
 
sysstat常用命令之内存监控
技术分享
命令:sar -r -f sa07
memfree:空闲内存
memused:已经使用的内存(物理内存)
buffers/cached:是为了提高文件读取的性能的磁盘缓存。
page cache(kbcached):实际上是针对文件系统的,是文件的缓存
Buffer cache(buffers):是针对磁盘块的缓存
kbcommit:是为了保证程序的正常运行需要的内存
 
内存换页(物理内存和硬盘的换入换出)
技术分享
命令:sar -B -f sa07
pgpgin/s:换入每秒种从磁盘或swap置换到内存的字节数(KB)
pgpgout/s:换出表示每秒从内存置换到磁盘或swap的字节数(KB)(这两个参数很重要,一定程度上表现了内存的压力)
fault/s:每秒系统产生的缺页数,即主缺页和小缺页之和(缺页就是某些数据放在了磁盘上,而需要取该数据需要从内存当中去,导致了缺页)
 
技术分享
命令:sar -W -f sa07
pswpin/s:换入每秒种swap换入的字节数(KB)
pswpout/s:换出表示每秒swap换出的字节数(KB)(这两个参数很重要,一定程度上表现了内存的压力)
 
sysstat常用命令之IO监控
 
技术分享
命令:sar -b -f sa07
tps:每秒物理设备的I/O请求次数
rtps:每秒钟从物理设备读入的请求次数
wtps:每秒钟想物理设备写入的请求次数
breas/s:每秒向物理设备读入的数据量,单位为块/s
bwrtn/s:每秒想物理设备写入的数据量,单位为块/s
 
技术分享
命令:sar -b -f sa07
tps:每秒物理设备的I/O请求次数
rd_sec每秒读取扇区的次数
wr_sec每秒写扇区的次数
avgrq-sz:平均每次设备I/O操作的数据大小
avgqu-sz:磁盘请求队列的平均长度
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间单位为毫秒
svctm:系统处理每次请求的平均时间不包括请求队列中的消耗时间
%util:I/O请求占CPU的百分比,比率越大说明越饱和
 
sysstat常用命令之NetWork监控
 
DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示所有5个开关,他们可以单独或者一起使用
技术分享
命令:sar -n DEV -f sa07
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包
 
评估磁盘读写性能极限
fio工具
在centos 中安装好fio
技术分享
输入命令 
fio -filename=/test -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=30  -group_reporting -name=mytest

说明:
filename=/dev/sdb1       测试文件名称,通常选择需要测试的盘的data目录。
direct=1                 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite             测试随机写的I/O
rw=randrw                测试随机写和读的I/O
bs=16k                   单次io的块文件大小为16k
bsrange=512-2048         同上,提定数据块的大小范围
size=5g    本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30               本次的测试线程为30.
runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync           io引擎使用pync方式
rwmixwrite=30            在混合读写的模式下,写占30%
group_reporting          关于显示结果的,汇总每个进程的信息。

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

可得出该设备能承受的IO
IO能力强的才适合作为数据库服务器
 
 
2015.8.10
JMeter性能测试工具
 
Apache组织开发的性能测试工具
可以对:
    web-http,https
    SOAP(webservice)
    FTP
    LDAP
    TCP
    NOSQL等等都可以做测试
 
winSCP:上传文件到服务器的软件
 
另外需要在服务器端安装php+apache环境:http://www.jb51.net/os/188488.html
安装 nginx  http://www.centoscn.com/CentosServer/www/2014/0904/3673.html
phpMyAdmin配置安装
 
yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install phpmyadmin
systemctl restart httpd.service #重启apache
systemctl restart mariadb.service #重启MariaDB
 
最后修改conf.d中的phpMyAdmin.conf文件即可
使用putty连接上centos7服务器(需要知道centos7的ip。获取方法,ip addr)
连接上之后输入用户名密码进入命令行输入top得到系统进程当前状态等
使用putty获取进程的资源占用信息(top命令以及其附加命令)
 
退出 vi 输入:wq回车
使用ECShop进行测试
ECShop安装运用
使用winscp将ECShop上传到服务器,再用putty,使用unzip解压压缩包,
技术分享
docs:安装的解释说明
upgrade:更新
upload:最新安装
将upload拷贝到根目录的ecshop中
 
若出现在虚拟机上能访问,宿机上不能访问的情况,请设置修改防火墙
命令:vi /etc/sysconfig/iptables
重启防火墙:systemctl restart iptables.service
,并且将该文件夹的权限改给apache
命令:chown -R apache:apache mycms(项目目录)
2015.8.11
JMeter进行压力测试
Apache 组织开发的性能测试工具,用于模拟大量用户的并发访问,最大的有点是完全开源
jmeter需要安装了java jdk
新增用户组(thread group)
技术分享
 
自动化测试
录制-->回放
录制:
只有添加可config element 中的HTTP Request Defaults才能添加sampler 中的HTTP Request等
1.在test plan 中添加用户组
2.在用户组添加config element中的HTTP Request Defaluts
3.在用户组下添加logic controller 中的recording controller
4.在workbench中添加HTTP(s)Test Script Recorder并配置好用户组(listener 中的view Results Tree是加在此处)
5.添加代理服务器,(在Internet选项中,连接,局域网设置)
技术分享
这个端口是在HTTP(s)Test Script Recorder中设置的端口
 
回放:
将需要回放的php保存起来,其他的删掉,添加一个listener中的,aggregate report和vieew results tree
点击start启动回放
 
任务:
2015.8.12
自定义参数回放:
添加固定变量如:ip port等
1.添加config 中的UserDefined variables
2.在UserDefined variables添加参数
3.在各个链接中修改其参数配置${参数name}
技术分享
添加参数组,如id(可实现进入不同id的页面)
1.添加config中的CSV data set config
2.在bin目录下新建一个data目录在其中新建个catgd.csv的文件
3.在其中写入参数(设置编码为UTF-8 without ROM(在notepad中))
4.在CSV data set config 中配置 技术分享
5.同样在每个页面中将参数参数化(${参数name})
 
使用postProcessor判断响应中的关键数据是否正常显示页面
1.找到页面关键元素(能标识该该页面正常打开的元素)
技术分享
2.在页面下添加css/jquery Extractor,在其中配置技术分享
3.在页面下添加BeanShell Assertion 配置技术分享
便会在命令行中打印取到的值(打印是为了调试)
 
jmeter模拟用户的等待行为
在用户组下添加timer(放在需要等待的页面下面)
constant timeer 固定等待时间
gaussian random timer 满足高斯曲线的等待时间
poisson random timer 满足泊松分布的等待时间
技术分享
开始测试:使用putty top检测服务器性能
设置好并发用户数和请求次数start使用二分法便可知道该服务器能承受的并发量,并查看知道性能瓶颈(CPU占用率)
 
监控mysql慢查询
 
若出现数据表数据内存不够的情况,使用phpMyadmin对该表进行操作,修改存储引擎为innoDB
慢查询解决方案:
加缓存
使用putty,输入vi /etc/myconf进行修改my.conf文件,加入:
log-queries-not-using-indexes=on#将未使用索引的记录下来
long_query_time=0.03
log-slow-queries=/var/log/mariadb/mariadb.queries-slow.log#对应文件夹
技术分享
保存重启mysql服务 systemctl restart mariadb.service
若无/var/log/mariadb/mariadb.queries-slow.log该文件则新建,并设置好该文件权限
 
检查该log文件便可知道慢查询的语句,可以针对优化
 
2015.8.13
使用systat分析系统硬件性能瓶颈
使用systat教程在上面
 
jmeter进阶,使用session支持
打开jmeter,打开之前保存的文件
1.添加config 中的HTTP cookies Manager 
假如第一个是登录操作,
2.在用户组中添加一个logic controller中的loop controller,将登录后的操作页面加入该controller中,
原理是登录操作只执行一次(在用户组中的loop count设置为1),将loop controller中的loop count设置为forever
 
多用户组实现多场景测试
添加一个thread 中的thread group并设置好其中的设置(如场景1,不过其进行的操作应该不同)便可分派不同的用户个数来进行不同的操作。可以进行用户总数的参数化(也可以直接填入各个场景的用户个数)
    在test plan下添加config 下的user defined variable(也可以在Test plan下直接添加参数),添加参数,然后在每个场景中使用该参数(场景中运用方法:${__javascript("${User_Total}" * 0.5)}
 
Jmeter扩展
 
通过BeabShell进行java扩展
1.准备好实现特殊功能的java包(com.jmooc.jar文件)
2.在jmeter的根目录中添加dependencies文件夹(和bin目录同级)
3.在bin中找到jmeter.properties打开
4.搜索 plugin_dependency_paths,修改为plugin_dependency_paths=../dependencies;
5.重启jmeter.bat
6.在用户组中添加BeanShell Sampler 在Script中(调用扩展函数)写入:
 
 
import com.imooc.Math;
String ret =Math.sqrt("2.3");
log.info("Get THE RESULT:"+RET);
(可以在Options中选择显示log窗口)
 
通过BSF进行JavaScript扩展
添加一个BSF sampler或是BSF postProcessor
直接在script中写入JavaScript代码即可
开发自定义的Sampler、configElment
 
性能监控软件Nmon介绍
一个类似TOP但是显示功能更加丰富的工具
安装:yum list nmon检查机器是否安装,未安装的,使用# yum install nmon.x86_64
安装
使用:使用putty输入 nmon
技术分享
可安装红框中的提示输入字符以显示相关信息
技术分享
 

 






































以上是关于性能测试工具的主要内容,如果未能解决你的问题,请参考以下文章

链路性能测试中参数多样性方法分享

性能有瓶颈?3 个实时可视化 Python 工具包来帮你!

微信小程序代码片段

教你3个python「性能分析」工具,再也不用自己计算函数耗时了

PHP代码-psysh调试代码片段工具

Word 文档的优秀代码片段工具或插件?