整体目标:
安装虚拟机,并安装一套LAMP(Linux+Apache+Mysql+PHP)待测系统,推荐ECShop(http://www.ecshop.com),基于此进行Jmeter压力测试,并在测试后得出Jmeter测试报告,并根据sysstat得出Linux服务器的CIMN(CPU、IO、Memory以及Network)的性能。
队员分工:
-
角色1:安装LAMP:Linux服务器(Centos)、Apache及PHP
-
角色2:安装MySQL及ECShop(或类似B/S结构的系统)
-
角色3:安装sysstat并使用sysstat查看Linux服务器的CIMN(CPU+IO+Memory+Network)的性能
-
角色4:使用Jmeter进行5*10、50*20的压力测试并得出Jmeter Aggregate Report,同时运用sysstat对服务器信息进行统计
实验相关内容:
本次实验得实现是通过在其中一个人的机器上装Ubuntu系统,然后在这台机器上配置Apache2, PHP5, MySQL,再安装ECShop和sysstat做为服务器,而另一台机器上安装Jmeter,通过录制脚本然后访问服务器端搭建好的ECShop网站,在服务器端通过sysstat来查看服务器得性能。最后在客户端机器和服务端机器分别得出报告。
sar命令详解:http://www.toxingwang.com/linux-unix/2027.html
linux下得top命令截图:
搭建好的ECShop界面截图:
Jmeter的testPlan展开截图:
后置处理器:
BeanShell代码截图:
1 java.util.regex.Pattern p = java.util.regex.Pattern.compile("id=(\d+)"); 2 java.util.regex.Matcher m = p.matcher(bsh.args[0]); 3 boolean found = m.find(); 4 if (found) { 5 if(m.group(1).equals(bsh.args[1])) { 6 Failure = false; 7 } 8 else { 9 Failure = true; 10 FailureMessage = m.group(1) + "<>" + bsh.args[1]; 11 } 12 } 13 else failure=true;
断言显示:
False
True
运行Jmeter测试之后的Aggregate Report Result截图:
运行Jmeter测试之后的服务器性能截图:
CPU
第一个是查看系统内进程队列的情况
- runq-sz 准备运行的进程运行队列。
我们可以看到运行队列比平常时候要显著得长,可见是压力测试所创建的进程
CPU:表示机器内所有的CPU;
%user 表示CPU的利用率;
%nice 表示CPU在用户层优先级的百分比,0表示正常;
%system 表示当系统运行时,在用户应用层上所占用的CPU百分比;
%iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比;
%idle 表示空闲CPU百分比,值越大系统负载越低;
如截图可见idle值非常低,一般为90%以上,空闲CPU百分比明显偏低,可见压力测试已占用绝大多数得CPU资源
IO
- bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。
- lread/s: 平均每秒从系统buffer读出的逻辑块数。
- %rcache: 在buffer cache中进行逻辑读的百分比。
- bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。
- lwrit/s: 平均每秒写到系统buffer逻辑块数。
- %wcache: 在buffer cache中进行逻辑读的百分比。
- pread/s: 平均每秒请求物理读的次数。
- pwrit/s: 平均每秒请求物理写的次数。
可见每秒请求写得次数比一般时候要高,猜测是mysql得写入数据
Memory
Network
IFACE:设备名; rxpck/s:每秒收到的包; rxbyt/s:每秒收到的所有包的体积; txbyt/s:每秒传输的所有包的体积; rxcmp/s:每秒收到数据切割压缩的包总数; txcmp/s :每秒传输的数据切割压缩的包的总数; rxmcst/s: 每秒收到的多点传送的包;
如图可见每秒收到得包数量显著增加,网络吞吐量大。
Ps.遇到得错误:
1.ECShop和PHP版本不兼容问题通过修改代码可以改正
2.压力测试之后可能会出现ECShop服务器端得数据库ecs_sessions表内容溢出无法继续访问服务器,可以通过手动删除该表得内容来改正