介绍
在本教程中,我们将介绍如何使用Apache JMeter对您的Web应用环境进行基本的负载和压力测试,我们将向您展示如何使用图形用户界面来构建测试计划并对Web服务器运行测试。
JMeter是一个开源的桌面Java应用程序,旨在加载测试和测量性能,可以用来模拟各种场景和输出性能数据的负载,包括CSV和XML文件和图表,因为它是100%Java,所以它可以在支持Java 6或更高版本的每个操作系统上使用。
前提条件
为了遵循本教程,你需要有一个计算机,你可以运行JMeter,和一个网页服务器来加载测试,不要对你的生产服务器运行这些测试,除非你知道他们可以处理负载,或者你可能会对你的服务器的性能产生负面影响。
您可以將本教程中的測試適應於您自己的任何網頁應用程式。我們正在測試的網頁伺服器為例是1 CPU / 512 MB VPS,在NYC2 DigitalOcean Datacenter上執行WordPress LEMP Stack。
请注意,JMeter测试结果可能因各种因素而扭曲,包括JMeter可用的系统资源(CPU和RAM)以及JMeter与正在测试的Web服务器之间的网络。
安装JMeter
由于我们正在使用Apache JMeter作为桌面应用程序,并且使用的桌面操作系统有很多种,所以我们不会涵盖任何特定操作系统的JMeter的安装步骤。
以下是该软件的列表,包含与档案链接,需要运行JMeter:
- Oracle Java or OpenJDK (6 or later)
- Apache JMeter
根据您如何安装 Java,您可能需要将 Java bin 目录添加到您的PATH
环境变量中,以便 JMeter 找到 Java 和 keytool 二进制。
此外,我们将将您安装 JMeter 的路径称为$JMETER_HOME
。因此,如果您使用的是基于 Linux 或 Unix 的操作系统,则 JMeter 二进制位于$JMETER_HOME/bin/jmeter
。
作为参考,在撰写本教程时,我们使用了以下软件版本:
- Oracle Java 7 更新 60、64 位
- JMeter 2.11
一旦安装和运行了 JMeter,让我们继续构建一个测试计划!
构建基本测试计划
启动 JMeter 后,您应该看到带空 Test Plan 的图形用户界面:
测试计划由一系列的测试组件组成,这些组件决定了如何模拟负载测试,我们将解释这些组件的一些如何使用,当我们将它们添加到我们的测试计划中。
添加一个 Thread 组
首先,添加一个 Thread Group 到 Test Plan:
- 右键单击 Test Plan
- 鼠标单击 _Add >-
- 鼠标单击 _Threads (用户) >-
- 点击 _Thread Group-
_Thread 组有三个特别重要的属性影响负载测试:
- **Treads(用户)数:JMeter将试图模拟的用户数。 将此设置为 50
- Ramp-Up Period(在秒):JMeter将分配线程开始的时间长度。 将此设置为 10
- Loop Count:执行测试的次数。 将此设置留给 1
添加 HTTP 请求默认值
使用 HTTP Request Defaults Config 元素在我们的测试计划中设置 HTTP 请求的默认值,如果我们希望将多个 HTTP 请求发送到同一个服务器作为测试的一部分,这特别有用。
- 选择 Thread Group,然后右键单击它
- 鼠标上 _Add > _)3. 鼠标上 _Config 元素 >-
- 点击 _HTTP 请求偏好
在 HTTP 请求默认值中,在 Web Server 部分中,填写 Server 名称或 IP 字段,用您要测试的 Web 服务器的名称或 IP 地址。
添加 HTTP Cookie 管理器
如果您的 Web 服务器使用 Cookie,您可以通过将 HTTP Cookie Manager 添加到 Thread Group 来增加对 Cookie 的支持:
- 选择 Thread Group,然后右键单击它
- 鼠标对 _Add > _)3. 鼠标对 _Config Element >-
- 点击 _HTTP Cookie Manager
添加 HTTP 请求样本器
现在,您将要将一个 HTTP Request 采样器添加到 Thread Group,这代表每个线程(用户)将访问的页面请求:
- 选择 Thread Group,然后右键单击它
- 鼠标上 _Add > _)3. 鼠标上 _Sampler >-
- 点击 _HTTP 请求
在 HTTP 请求中,在 HTTP 请求部分中,用您希望每个线程(用户)请求的项目填写 Path,我们将此设置为 /
,因此每个线程将访问我们服务器的首页。
** 注意:** 如果您想作为测试的一部分添加更多 HTTP 请求,请重复此步骤,每个线程将执行本测试计划中的所有请求。
在 Table Listener 中添加查看结果
在JMeter中,倾听器被用来输出负载测试的结果. 有各种倾听器可用,其他倾听器可以通过安装插件添加。
- 选择 Thread Group,然后右键单击它
- 鼠标在 _Add >-
- 鼠标在 _Listener >-
- 点击 _View 结果在表
您还可以输入 Filename 值以将结果输出到 CSV 文件中。
运行基本测试计划
现在我们已经建立了基本的测试计划,让我们运行它,看看结果。
首先,通过点击 File 然后 Save 来保存测试计划,然后指定您想要的文件名称,然后在左侧窗格中选择 View Results in Table,然后从主菜单中点击 Run 然后点击 Start (或者只需点击主菜单下方的绿色启动箭头)。
解释结果
您可能会看到所有请求的状态为成功
(由一个绿色三角形标记)。之后,您可能最感兴趣的列是 Sample Time (ms) 和 Latency 列(不显示在示例中)。
- ** 延迟 ** : JMeter 发送请求和收到初始响应之际所需的毫秒数
- ** 示例时间**:服务器完全满足请求所需的毫秒数(响应 +延迟)
根据生成的表格,样本时间的范围为 128-164 ms. 这是一个基本主页的合理响应时间(约为55 KB)。 如果您的Web应用程序服务器不需要资源,如示例所示,您的样本时间将主要受地理距离(通常会增加延迟)和请求项目的大小(增加传输时间)的影响。
因此,我们的服务器幸存下来了我们的模拟50用户访问我们的55KBWordPress主页超过10秒(每秒5秒),接受响应。
增加负荷
让我们尝试同样的测试,80个线程超过10秒。在左侧面板的 Thread Group 项中,更改 Number of Threads (users) 到 80.现在点击 View Results in Table,然后点击 Start。
正如你所看到的,样本时间已经增加了近一秒,这表明我们的Web应用程序服务器开始被请求所覆盖。
通过SSH登录到您的Web服务器并运行顶部
:
1top
除非您有用户积极击中您的服务器,否则您应该看到CPU(s) %用户使用率(us)应该非常低或0%,而CPU(s) %空白(id)应该是99%+,如下:
现在,在 JMeter中,重新开始测试,然后返回您的 Web 服务器的 SSH 会话。
在我们的例子中,CPU %用户使用率为94%,系统使用率(sy)为4.7%与0%空闲。我们没有像上面的图像所示的记忆力耗尽,所以性能下降是由于缺乏CPU功率!我们还可以看到服务WordPress的php5-fpm流程使用的是大部分CPU(约96%组合)。
为了在10秒内满足这个80用户模拟的需求,我们需要增加CPU或优化服务器设置以使用更少CPU。在WordPress的情况下,我们可以将MySQL数据库(使用CPU的一部分)移动到另一个服务器,我们也可以实施缓存(这将减少CPU使用)。
如果你好奇,你可以调整测试中的线程数量,看看你的服务器在开始表现出性能下降之前可以处理多少线程。
结论
JMeter 可以是一个非常有价值的工具来确定您的 Web 应用程序服务器设置应该如何改进,以减少瓶颈和提高性能. 现在你已经熟悉了 JMeter 的基本使用,请自由创建新的测试计划来衡量你的服务器在各种情况下的性能。
作为例子,我们使用的测试并不准确地反映正常用户的使用模式,但JMeter有工具来执行各种测试,这些测试可能在您自己的环境中有用。例如,JMeter可以配置来模拟用户登录您的应用程序,客户端缓存,并使用URL重写处理用户会话。还有许多其他内置的样本,倾听器和配置工具,可以帮助您构建您想要的场景。此外,还有JMeter插件来增强其功能,可在 http://jmeter-plugins.org/下载。