使用Apache JMeter测试web服务器性能
在这篇文章中,我将介绍Apache JMeter,一个强大的免费自由开源的web应用性能测试工具。JMeter不仅可以模拟负载,而且可以进行回应验证。
JMeter的特点如下:
- 可以测试各类web应用的性能,如web服务器、SOAP、FTP、JMS、邮件服务器(SMTP/POP3/IMAP)等等。
- 既可以测试静态内容,又可以测试动态内容
- 提供GUI界面
- 100%纯Java代码写成,可以安装在Linux、Mac OS、Windows操作系统上。
- 多线程框架
- 可以进行分布式测试,从不同的机器上对web应用进行测试
- 有大量插件
- 离线分析功能
安装Java
JMeter完全用Java编写,所以在安装JMeter之前,我们需要安装好Java。使用下面的命令查看系统上有没有安装Java
java --version
如果没有安装好,可以使用下面的命令安装:
sudo apt-get install openjdk-8-jdk
这将安装OpenJDK。如果你想安装Oracle的JDK,那么使用下面的命令:
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer
安装好后,输入“java -version”命令查看Java版本
matrix@vivid:~$ java -version Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
javac -version命令用于查看java编译器版本
matrix@vivid:~$ javac -version Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar javac 1.8.0_60
设置Java环境变量
要自动设置java_home和path等环境变量,执行下面的命令:
sudo apt-get install oracle-java8-set-default
安装JMeter
在ubuntu系统上只需要执行下面的命令
sudo apt-get install jmeter
安装好后,打开JMeter,默认为英文界面,我们可以在菜单中点击Options choose language >> chinese(simplified) 来选择中文。
创建一个简单的测试计划(test plan)
启动JMeter后,有一个默认的测试计划,但这个测试计划并没有任何内容,我们要为测试计划添加线程组,然后在线程组下面添加HTTP请求默认值、HTTP Cookie 管理器、HTTP请求等内容。
添加线程组
右击 test plan,选择添加 Threads (Users) 线程组
线程组有3个重要的属性需要我们来指定。线程数就是JMeter模拟用户的数量,每一个线程就是一个模拟用户。Ramp-Up Period是从第一个用户发出第一个请求到最后一个用户发出第一个请求所花费的时间。循环次数是每个用户所发出的请求数。
为线程组添加HTTP请求默认值
右击“线程组”>>“添加”>>“配置元件”>>“HTTP请求默认值”
在HTTP请求默认值的web服务器部分,填入服务器名称或IP。注意,如果你填写的是服务器名称,那么不要在前面加http://,JMeter会自动加上http://。
添加HTTP cookie管理器
右击“线程组”,选择“添加”>>“配置元件”>>“HTTP Cookie 管理器”
添加HTTP请求
右击”线程组“,选择”添加“>>”Sampler“>>”HTTP请求”
在HTTP请求中,将路径指定为/,这样JMeter的所有用户便会对服务器主页发出请求。在这里,你可以不指定服务器名称或IP,因为在HTTP请求默认值当中已经指定了。
添加一个监听器
在JMeter中,监听器是用来输出测试结果的,我们可以右击”线程组”,选择”添加”>>”监听器”>>”用表格察看结果”,这样结果会以表格的形式输出。
经过上面的步骤,我们就创建好了一个测试计划。
执行测试计划
首先,保存这个测试计划以便将来使用。在菜单栏中选择“文件”>>“保存测试计划为”来保存。然后在左侧窗口中单击“用表格察看结果”,再单击菜单工具栏的启动按钮以开始测试。
在右侧窗口可以看见测试结果。
对测试结果的解释
首先我们看到绿色的三角形,这表示请求得到回复。然后我们关心的两列数据是Sample Time (样本时间)和 latency(延迟)。样本时间和延迟都是以毫秒(ms)为单位。1000 milliseconds = 1 second,一毫秒等于一秒的千分之一。
- 延迟:数据在用户和服务器之间发送所需要的时间,包括请求到达服务器的时间和回复到达用户的时间。
- 样本时间:在这里样本时间是指服务器的响应时间加上延迟,响应时间是指服务器收到请求后到发出回复所花费的时间。每一次请求就是一个样本。
从上图可以看出,样本时间最低也有3秒,而延迟大多数在1秒以下,说明在这种情况下,服务器响应时间太长,也就是说服务器的处理请求的效率太低。
在服务器上使用top命令来查看CPU和内存使用率
当服务器没有收到请求时,top命令显示如下,你会看到%Cpu(s)的使用情况为 us (User Usage)基本上接近0,而 id (idle)接近100%,也就是说CPU基本上处于空闲状态。
当我们用JMeter对服务器进行测试的时候,top命令输出结果如下。这时%Cpu(s) 中 us 接近100%,而 id接近0,同时我们也可以看到内存还很充足。说明性能瓶颈在CPU。
而在下图中观察进程可以发现,php5-fpm进程占用了大量CPU。