信息系统的性能是一种指标,表明信息系统对其及时性要求的符合程度。对于一个系统而言,包含并发用户数、响应时间、吞吐量、以及资源利用率等方面的信息。
压力测试是指通过逐渐增加系统负载,测试系统性能的方法和手段。通过压力测试最终确定在什么压力条件下系统性能的表现如何。是一种对于系统提供服务能力的服务能力评估的方法。其主要分为如下几种:
压力测试是一种测试评估的方法和手段,因此需要对测试环境、初试压力的规划和计算都有一些经验,由于被测系统的业务逻辑负责度不一样,因此没有一个统一的标准,因此本部分内容仅供参考。
对于被测系统的部署环境一般有如下几点建议:
被测系统的应用服务器和数据持久化服务器最好分开部署,除非生产环境就是在一台服务器上,否则不能部署在一台服务器上。测试压力机和被测系统服务器要部署在同一个子网下,并且要求之间的访问带宽千兆。
被测系统第一次测试压力部署一个最小集合。(例如系统有一个APP服务、一个MySQL服务就可以满足被测系统的完整性,那么就先部署一个APP服务、一个MySQL服务)
相信很多人在第一次做压力测试的时候,对并发用户数的选择一直有很多的疑惑,那么下面介绍一些行业内的通用的计算方法,但是这些方法也不是绝对的方法,这些仅仅是压力测试并发用户数的一种计算方法,但是最后是不是n的并发就可以支持m级别的用户也是由被测系统逻辑复杂的决定的。但是可以用如下的一种方法确定初始开发压力测试的并发用户数。
1)平均并发用户数为 C = nL/T
2)并发用户数峰值 C‘ = C + 三次根号C
其中C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是值考察的时间长度
C’是并发用户数峰值
例1,假设系统A,该系统有3000个用户,平均每天大概有400个用户要访问该系统(可以从系统日志从获得),对于一个典型用户来说,一天之内用户从登陆到退出的平均时间为4小时,而在一天之内,用户只有在8小时之内会使用该系统。
计算结果:
平均并发用户数为:C = 400*4/8 = 200
并发用户数峰值为:C‘ = 243
例2, 某公司为其170000名员工设计了一个薪酬系统,员工可进入该系统查询自己的薪酬信息,但并不是每个人都会用这个系统,假设只有50%的人会定期用该系统,这些人里面有70%是在每个月的最后一周使用一次该系统,且平均使用系统时间为5分钟。
计算结果:
则一个月最后一周的平均并发用户数为(朝九晚五):
n = 170000*0.5*0.7/5 = 11900;
C= 11900*5/60/8 = 124
C'=129
对绝大多数场景,我们用(用户总量/统计时间)影响因子(一般为3)来进行估算并发量。 比如,以乘坐地铁为例子,每天乘坐人数为5万人次,每天早高峰是7到9点,晚高峰是6到7点,根据8/2原则,80%的乘客会在高峰期间乘坐地铁,则每秒到达地铁检票口的人数为5000080%/(36060)=3.7,约4人/S,考虑到安检,入口关闭等因素,实际堆积在检票口的人数肯定比这个要大,假定每个人需要3秒才能进站,那实际并发应为4人/s*3s=12,当然影响因子可以根据实际情况增大!
C=12
比如一个网站,每天的PV大概1000w,根据2/8原则,我们可以认为这1000w pv的80%是在一天的9个小时内完成的(人的精力有限),那么TPS为:1000w80%/(93600)=246.92个/s,取经验因子3,则并发量应为:
C=246.92*3=740
4.2.4 计算方法4:
C = 系统最大在线用户数的8%到12%
4.2.5 计算方法5:
C=(Think time + 1)*TPS
按照上述的某一种估算,开始压力通过发压力工具发压(推荐LoadRunner、Jmeter一种工具即可)
监控服务器资源特性,推荐使用LoadRunner、Jmeter自带的监控,如果都不熟悉推荐nmon
通过上述两个部分结果综合分析压力测试结果
如果发现资源消耗在外部接口上,那么推荐系统解耦合。这里推荐使用TestDouble服务
如果第一阶段压力测试过程中发现有服务性能问题(一般都是通过监控资、响应时间、QPS、TPS、HPS,判断。具体没有一个统一标准,后续会逐渐将问题特征汇总收集),那么就要引入故障诊断工具。故障诊断工具推荐一块yourkit 0X00106 Yourkit 故障诊断工具使用。
按照第一阶段内容全部就绪
配置好yourkit的监控,在测试过程收集服务端信息
通过上述所有的结果综合分析故障
压力测试完成后并不是压力测试就结束了,压力测试是一种解决故障、评估服务计算能力的手段。通过最小计算单元的规划,评估最小计算单元的服务计算力。在后续如果性能出现问题,设定好快速扩容方案(但是这些都是在已经没有性能问题的情况下),这部分有可能需要被测系统有session共享、会话保持、数据库代理等能力。
疲劳测试一般都是通过混合场景测试出来的,所谓混合场景就是在大并发的情况下,包含了各种各样的逻辑操作。例如:1000的并发,有800个人在登录后首页访问,100个人在登陆后查询,80个人在登陆后新增,20个人在登录后修改。那么建立一种这样混合脚本的测试场景,更大的模拟被测系统的最大压力时候的用户使用行为。
疲劳测试的策略一般推荐7X24小时的测试,但是由于项目工期或者是系统忙闲周期明显,可以测试3X24小时或者1X24小时,具体选择要按照服务受众用户群体的行为逻辑评估。
由于LoadRunner并不提供Linux的控制台,这无疑给一些在服务端做压力测试制造了一些麻烦。但是LoadRunner提供了Linux的压力机代理,这样我们可以通过Windows的控制台链接LInux的压力机,通过Linux发压力。Linux的压力机单台提供压力的能力是远远大于windows的压力机的
安装包
上传Linux.zip
unzip Linux.zip
chmod -R 777 Linux
cd Linux
sh installer.sh
然后一路下去
添加一个用户
useradd -g 0 test
或者
useradd -g 0 -s /bin/csh test
设置环境变量(bsh)
vim /opt/HP/HP_LoadGenerator/env.sh
内容:
#!/bin/bsh
export PRODUCT_DIR="/opt/HP/HP_LoadGenerator"
export M_LROOT="/opt/HP/HP_LoadGenerator"
export LD_LIBRARY_PATH=$M_LROOT/bin:$M_LROOT/lib:/usr/lib
export DISPLAY='0.0'
export PATH=$PATH:${M_LROOT}/bin
修改该文件的使用属性
chmod 777 env.sh
在环境变量中使用该文件,在/etc/profile 和/etc/bashrc 最后加入:
source /opt/HP/HP_LoadGenerator/env.sh
用户重新登陆,检查环境变量是否生效
echo $PRODUCT_DIR
echo $M_LROOT
echo $LD_LIBRARY_PATH
echo $PATH
执行
./opt/HP/HP_LoadGenerator/bin/verify_generator
全部ok表示已经安装成功
./mdaemonsetup start
安装完成后,在/opt/HP/HP_LoadGenerator/bin下所有目录及子目录均属于非root用户及非root用户组。如果出现文件夹为root用户组,文件为bin用户,则也会出现Not all extension Dlls were loaded的问题,需要重新安装。
是因为64位系统中安装了32位程序
解决方法:
yum install glibc.i686
解决办法
yum whatprovides libstdc++.so.5
yum install compat-libstdc++-33-3.2.3-72.el7.i686
解决办法
M_LROOT变量找不到的问题修改:
/opt/HP/HP_LoadGenerator/bin/lrv/ vusrchk中288行,将unset M_LROOT下移到289行后面
解决LDLIBRARYPATH找不到的问题:将/opt/HP/HP_LoadGenerator/bin/lrv/vusrchk中356行,改成357行内容。
SunOS|Linux
#temp=`$my_shell -c ' echo MERCURY $LD_LIBRARY_PATH ' 2> /dev/null`
temp=`$my_shell -c ' echo MERCURY ${M_LROOT}/bin ' 2> /dev/null`
;;
esac
首先find出libdriver.so位置,看看有没有
修改/opt/HP/HPLoadGenerator/bin/lrv/vusrchk,在483行处再加入一次这个lib的路径:export LDLIBRARYPATH=
{MLROOT}/bin
else
echo "OK $trail"
fi
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/${M_LROOT}/bin
echo $ECHO_N "Verify running the product executables...$ECHO_C"
rm -f /tmp/verify_mdrv_err.txt
Jmeter是需要JDK的运行环境,因此需要先在Linux安装JDK,然后配置环境变量,本部分略过。
http://archive.apache.org/dist/jmeter/binaries/
下载对应的jmeter版本。
将jmeter上传到服务器上(如果没有远程shell,建议使用MobaXterm),然后运行如下命令:
unzip apache-jmeter-3.0_json.zip
cp -r jmeter-3.0 /usr/local/jmeter-3.0
然后配置环境变量,如下:
vi /etc/profile
进入编辑模式
export JMETER_HOME=/usr/local/jmeter-3.0
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
保存后,source /etc/profile (让配置文件立马生效),然后通过
jmeter -v
检查配置是否生效。
使用 将本地生成的jmx文件上传到服务器 输入命令:
# jmeter -n -t /home/jessica/httpThread.jmx -l log.jtl
nmon就可以完全满足上述需求。一个小巧轻便的监控工具,同时提供结果分析工具。好了那让我们一起看看他怎么用。
下载地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
进入后,选择你需要的版本。一般我们都会选择x86的包,我们看到安装包还有power架构的源码包,这些是有CPU的架构决定的。
CPU架构分类:1、IBM 的 PowerPC架构(Power G4、G5、G6、PowerXCell) 2、MIPS 的 MIPS架构(多家厂商,包括AMD也获授权生产,龙芯也是MIPS变种) 3、SUN 的 UltraSPARC架构(UltraSPARC III、IV、VI、T1、T2) 4、DEC 的 Alpha架构(现今少见,DEC被Compaq收购,Compaq又被HP收购) 5、Acorn的 ARM架构 6、Intel和HP 的 EPIC架构(Iantium、Iantium2),这也就是 IA64 架构。还有IA32,其中IA64就是我们常说的X86_64,IA32就是我们常说的X86
后续的例子我们以下载X86_64为例,因此我们下载了如下图的包:
进入shell客户端,下载安装包并解压:
一般会通过如下方法在本地新建一个放置安装包的目录 cd/home mkdir mr_tester cd mr_tester
wget http://sourceforge.net/projects/nmon/files/nmon16e_mpginc.tar.gz
tar zxvf nmon16e_mpginc.tar.gz
mkdir /usr/local/bin/nmon/
cp -r * /usr/local/bin/nmon/
cd /usr/local/bin/
chmod 777 nmon
cd nmon
#下面运行那个工具,要看具体操作系统版本而定
./nmon_x86_64_centos6
就可以看到如下的界面了。
输入c可显示CPU的信息,“m”对应内存,“n”对应网络,“d”可以查看磁盘信息,“t”可以查看系统的进程信息,具体参数在工具的主页面下半部分有详细介绍这里不做累述。
为了方便建议将nmon作如下软链的操作:
cp/usr/local/bin/nmon/nmon_x86_64_centos6/usr/bin/nmon
但是在真实的测试过程中,我们有可能需要某一段时间里面的服务器资源的情况,因此我们需要对服务器资源进行采集。nmon是支持这样的需求的,首先我们看一个小例子:
nmon -s 1 -c 10 -s 4 -f -m /home
上面命令参数的含义是:
-s :每隔n秒抽样一次,这里为1秒
-c :取出多少个抽样数量,这里为10,即监控=10*1秒=10秒
-f :按标准格式输出文件名称:<hostname>_YYYYMMDD_HHMM.nmon
-m :结果输出路径
其他命令:输入nmon后,进入nmon的页面,输入-h就可以看到全部帮助了
nmon有一个非常踊跃的excel的分析工具,是有IBM提供。下载地址如下:https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon_analyser
下载下面的文件。
下载后,有一个word和一个excel,其中excel是工具,word是使用手册。
在linux下载生成的结果,双击打开图表工具 excel的工具文件打开 :
然后点击上面的Analyze nmon data” 按钮后,选择服务器的记录文件,如果按钮点击无效,如下图所示允许允许宏。
选择刚刚的导出来的linux的记录就可以看到图形化的linux资源占用分析了。
rstat协议允许网络上的用户获得同一网络上各机器的性能参数。
(1)rsh-0.17-14.i386.rpm
(2)rsh-server-0.17-14.i386.rpm
(3)rpc.rstatd-4.0.1.tar.gz
查看是否安装并卸载rsh
[root@localhost /]# rpm -qa |grep rsh --查看是否安装rsh
[root@localhost /]# rpm -e + 版本号 --卸载该版本
安装rsh,rsh-server
[root@localhost /]# rpm -ivh rsh-0.17-14.i386.rpm
[root@localhost /]# rpm -ivh rsh-server-0.17-14.i386.rpm
或[root@localhost /]#yum -y install rsh*
下载并安装rstatd,下载地址:http://sourceforge.net/projects/rstatd,上传至/usr/local
查看是否安装,一般来说Linux都没有安装
[root@localhost /]# find / -name rpc.rstatd
安装rstatd
[root@localhost /]# tar -xzvf rpc.rstatd-4.0.1.tar.gz
[root@localhost /]# cd rpc.rstatd-4.0.1
[root@localhost /]# ./configure
[root@localhost /]# make
[root@localhost /]# make install
修改/etc/xinetd.d目录下面的3个conf(rogin,rsh,rexec)中的disable均设置为no
[root@localhost /]# cd /etc/xinetd.d --进入到/etc/xinetd.conf目录中
[root@localhost /]# vi rlogin --编辑disable=no,保存
[root@localhost /]# vi rsh --编辑disable=no,保存
[root@localhost /]# vi rexec --编辑disable=no,保存
[root@localhost /]# rpc.rstatd --启动rpc.rstatd进程
[root@localhost /]# rpcinfo -p --执行此命令检查rpc服务的状态
如果未出现上图的rstatd说明没有安装成功,需要重复以上步骤。
到这里为止,LR监控Linux必要的服务都已安装好了。
[root@localhost /]# service iptables stop
在Controller中,将System Resource Graphs中的Unix resources拖到右侧的资源监控区域。鼠标右键选择Add Measurements,添加被监控Linux的IP地址x.x.x.x,选择需要监控的性能指标,确认。
注意:监控过程中要关闭Linux防火墙,否则可能会监控失败
Monitor name :UNIX Resources. Cannot initialize the monitoring on 192.168.52.189. Error while creating the RPC client. Ensure that the machine can be connected and that it runs the rstat daemon (use rpcinfo utility for this verification). Detailed error: RPC: Failed to create RPC client. RPC-TCP: Failed to establish RPC server address.
原因:Linux系统中没有安装rpc.rstatd,服务未开启的原因造成的。
解决办法:照上述方法安装rpc.rstatd并开启即可监控Linux.
原因:未安装gcc编译器. 在命令行里敲入gcc –v, 如果提示command not found 就表示你的系统里没有安装gcc编译器
解决办法:yum install gcc
重点:本地Jmeter版本和插件支持版本要对应)
1、本地插件:
https://jmeter-plugins.org/downloads/old/
下载解压,放到本地jmeter目录:
/Users/wuxi/Documents/apache-jmeter-3.2/lib/ext/
2、服务端需要插件:
https://jmeter-plugins.org/wiki/PerfMonAgent/
PerfMon Metrics Collector使用文档:
https://jmeter-plugins.org/wiki/PerfMon/
安装unzip:
yum install zip unzip
再次安装:
unzip ServerAgent-2.2.1.zip
执行:
sudo chmod 777 startAgent.sh
./startAgent.sh
查看端口:lsof -i:4444 又占用进程表示服务启动
PS:stand-alone模式的jetty为例
Windows安装yourkit Java Profiler 2014, 在工具中get free license就可以了。
Linux 下载linux版本的youkit(如果下载失效,请登录官网选择对应的版本下载
https://www.yourkit.com/java/profiler/download/)
Wget https://www.yourkit.com/download/yjp-2015-build-15046-linux.tar.bz2
tar xfj yjp.tar.bz2
将下载的安装包(yjp-2014-build-14116-linux.tar.bz2)通过FTP上传至服务器,并解压
cd /home/
mv yjp-2014-build-14116-linux.tar.bz2 yjp.tar.bz2
tar xfj yjp.tar.bz2
启动Jetty,YourKit会在10001-10010之间取可用的端口作为远程监听端口,查看启动端口,可以通过:
cd /home/yjp/bin
sh yjp.sh -attach
开启后结果:(如果有多个java进程,请选择正确的pid)
防火墙开放远程监听端口,否则YourKit无法远程连接:
/sbin/iptables -I INPUT -p tcp --dport 10001 -j ACCEPT //写入修改
/etc/init.d/iptables save //保存修改
service iptables restart//重启防火墙,修改生效
启动开发机YourKit,在欢迎界面找到”Connect to remote application”点开输入host:port,就可以远程连接上服务端。