如何使用 Apache JMeter 对网络服务器进行负载测试

介绍

在本教程中,我们将介绍如何使用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:

根据您如何安装 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 的图形用户界面:

JMeter GUI

测试计划由一系列的测试组件组成,这些组件决定了如何模拟负载测试,我们将解释这些组件的一些如何使用,当我们将它们添加到我们的测试计划中。

添加一个 Thread 组

首先,添加一个 Thread GroupTest Plan:

  1. 右键单击 Test Plan
  2. 鼠标单击 _Add >-
  3. 鼠标单击 _Threads (用户) >-
  4. 点击 _Thread Group-

_Thread 组有三个特别重要的属性影响负载测试:

  • **Treads(用户)数:JMeter将试图模拟的用户数。 将此设置为 50
  • Ramp-Up Period(在秒):JMeter将分配线程开始的时间长度。 将此设置为 10
  • Loop Count:执行测试的次数。 将此设置留给 1

Thread Group Properties

添加 HTTP 请求默认值

使用 HTTP Request Defaults Config 元素在我们的测试计划中设置 HTTP 请求的默认值,如果我们希望将多个 HTTP 请求发送到同一个服务器作为测试的一部分,这特别有用。

  1. 选择 Thread Group,然后右键单击它
  2. 鼠标上 _Add > _)3. 鼠标上 _Config 元素 >-
  3. 点击 _HTTP 请求偏好

在 HTTP 请求默认值中,在 Web Server 部分中,填写 Server 名称或 IP 字段,用您要测试的 Web 服务器的名称或 IP 地址。

HTTP Request Defaults

如果您的 Web 服务器使用 Cookie,您可以通过将 HTTP Cookie Manager 添加到 Thread Group 来增加对 Cookie 的支持:

  1. 选择 Thread Group,然后右键单击它
  2. 鼠标对 _Add > _)3. 鼠标对 _Config Element >-
  3. 点击 _HTTP Cookie Manager

添加 HTTP 请求样本器

现在,您将要将一个 HTTP Request 采样器添加到 Thread Group,这代表每个线程(用户)将访问的页面请求:

  1. 选择 Thread Group,然后右键单击它
  2. 鼠标上 _Add > _)3. 鼠标上 _Sampler >-
  3. 点击 _HTTP 请求

在 HTTP 请求中,在 HTTP 请求部分中,用您希望每个线程(用户)请求的项目填写 Path,我们将此设置为 /,因此每个线程将访问我们服务器的首页。

** 注意:** 如果您想作为测试的一部分添加更多 HTTP 请求,请重复此步骤,每个线程将执行本测试计划中的所有请求。

在 Table Listener 中添加查看结果

在JMeter中,倾听器被用来输出负载测试的结果. 有各种倾听器可用,其他倾听器可以通过安装插件添加。

  1. 选择 Thread Group,然后右键单击它
  2. 鼠标在 _Add >-
  3. 鼠标在 _Listener >-
  4. 点击 _View 结果在表

您还可以输入 Filename 值以将结果输出到 CSV 文件中。

运行基本测试计划

现在我们已经建立了基本的测试计划,让我们运行它,看看结果。

首先,通过点击 File 然后 Save 来保存测试计划,然后指定您想要的文件名称,然后在左侧窗格中选择 View Results in Table,然后从主菜单中点击 Run 然后点击 Start (或者只需点击主菜单下方的绿色启动箭头)。

Test Results Table

解释结果

您可能会看到所有请求的状态为成功(由一个绿色三角形标记)。之后,您可能最感兴趣的列是 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

Results Table 2

正如你所看到的,样本时间已经增加了近一秒,这表明我们的Web应用程序服务器开始被请求所覆盖。

通过SSH登录到您的Web服务器并运行顶部:

1top

除非您有用户积极击中您的服务器,否则您应该看到CPU(s) %用户使用率(us)应该非常低或0%,而CPU(s) %空白(id)应该是99%+,如下:

Idle Top Output

现在,在 JMeter中,重新开始测试,然后返回您的 Web 服务器的 SSH 会话。

Max CPU Top Output

在我们的例子中,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/下载。

Published At
Categories with 技术
comments powered by Disqus