2022 年 2 月 19 日

本快速操作指南的目的是解释如何对您的站点执行压力测试,并了解它在极端负载下的表现。我们用于此测试的开源工具是 HTTP 基准测试工具wrk

什么是(DoS)拒绝服务攻击:

拒绝服务 (DoS) 是攻击者阻止授权用户访问服务的一种攻击。最常见的 DoS 方法涉及用大量流量或数据请求淹没服务,以使服务在恶意流量结束之前无法响应合法用户。我们将使用 HTTP 基准测试工具 wrk 来模拟这种类型的攻击。

如何快速检查您的网站是否受到DoS攻击的保护?

在计算中,什么是基准:

根据维基百科,基准是:

在计算中,基准是运行一个计算机程序、一组程序或其他操作的行为,以评估一个对象的相对性能,通常是通过对它运行一些标准测试和试验。基准测试一词也通常用于精心设计的基准测试程序本身。

基准的两个关键特征是:

  1. 必须是可重复的。

  2. 必须是可量化的。

什么是wrk:

为了对我们的网站运行负载测试,我们使用wrk,根据他们的官方文档:

wrk 是一种现代 HTTP 基准测试工具,能够在单个多核 CPU 上运行时产生大量负载。它结合了多线程设计和可扩展的事件通知系统,例如 epoll 和 kqueue。

wrk 是开源的,但是在使用它之前,请看一下的 cryptography notice https://github.com/wg/wrk#cryptography-notice

wrk怎么安装

好的,最后我们将开始测试。确保您可以在终端上轻松运行命令,因为目前没有 GUI 可以运行 wrk。

  • ###如何在 Mac 上安装 wrk

  • 安装homebrew,在终端运行以下命令:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

进入全屏模式 退出全屏模式

    • 要安装 wrk,请在终端中运行以下命令:
brew install wrk

进入全屏模式 退出全屏模式

  • ### 如何在 Linux 发行版 Ubuntu 上安装 wrk
sudo apt-get update
sudo apt-get install wrk

进入全屏模式 退出全屏模式

  • ###如何在windows上安装wrk

Windows 用户需要先通过这个链接安装 Ubuntu,然后运行上面的两个命令。

如何对您的网站进行压力测试

wrk 的基本用法如下所示:

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

进入全屏模式 退出全屏模式

有效的命令行选项是:

-c, --connections: total number of HTTP connections to keep open with
                   each thread handling N = connections/threads

-d, --duration: duration of the test, e.g. 2s, 2m, 2h

-t, --threads: total number of threads to use

-s, --script: LuaJIT script, see SCRIPTING

-H, --header: HTTP header to add to request, e.g. "User-Agent: wrk"

    --latency: print detailed latency statistics

    --timeout: record a timeout if a response is not received within
                   this amount of time.

进入全屏模式 退出全屏模式

我将运行 90 秒的基准测试,使用 10 个线程,并保持 100000 个 HTTP 连接打开。

wrk -t10 -c100000 -d90s https://davidloor.com --timeout 3s --latency -H 'Client: wrk terminal'

进入全屏模式 退出全屏模式

关于我正在使用传递的选项做什么的快速解释:

-t10: Use ten separate threads


-c100000: Open 100000 connections


-d90s: Run the test for ninety seconds


https://davidloor.com The target website


--timeout 3s: Define a three-second timeout


--latency: print detailed latency statistics


-H 'Client: wrk terminal': Pass a Client header

进入全屏模式 退出全屏模式

因此,我们可以说压力测试试图模拟 100000 名用户在 90 秒内多次打开网站主页。

**重要提示:**在运行压力测试时,打开网站并尝试登录(如果网站有此能力),如果网站加载正常,您可能会认为它受到了简单的 DoS 攻击的保护,并且服务器能够处理大量负载。如果该站点需要一些时间来加载,或者它显示错误,则您的网站有问题,您应该 ping 您的托管服务提供商。在某些情况下,该站点将无法自行恢复,并且可能需要重新启动某些服务。

分析输出

运行命令后我得到这个:

Running 2m test @ https://davidloor.com
  10 threads and 100000 connections
  Thread Stats Avg Stdev Max +/- Stdev
    Latency 528.12ms 527.33ms 2.99s 87.92%
    Req/Sec 20.30 16.93 116.00 74.75%
  Latency Distribution
     50% 356.27ms
     75% 638.27ms
     90% 1.20s 
     99% 2.62s 
  11662 requests in 1.50m, 735.63MB read
  Socket errors: connect 97681, read 117, write 0, timeout 1581
Requests/sec: 129.43
Transfer/sec: 8.16MB

进入全屏模式 退出全屏模式

它简要介绍了测试运行了多长时间,以及测试的网站 (https://davidloor.com)。它还显示了延迟和 Req/Sec 的正态分布参数。显示在 1.5 分钟内,wrk 做了 11662 次请求,传输了 735.63 MB 的数据。

是平均。 Latency 和 Req/Sec 的值好吗?这取决于每个人的情况。我们应该始终尽量保持低延迟和高请求/秒,并且您应该记住,连接数越多,这两个值就越低。

结论

1.您可以使用wrk快速对您的站点进行压力测试。https://github.com/wg/wrk

2、安装wrk后运行压力测试的命令为:wrk -t10 -c100000 -d90s https://davidloor.com –timeout 3s –latency -H ‘Client: wrk terminal’

  1. 运行 wrk 命令,同时尝试在浏览器中加载站点,看看是否有任何缓慢的情况。

  2. 有免费资源可以提高您的网站性能,而无需向服务器添加更多资源,例如使用免费 CDN,例如cloudflare。

  3. 如果您有 CDN,请确保您充分利用其优势。

_ *免责声明:* 本博文中提供的信息仅用于教育目的。我不对您如何使用此处的信息负责。_

Logo

更多推荐