如何在Ubuntu16.04上使用Firefox、Siege和Sproxy对网站进行基准测试
介绍
Siege 是一个可配置的基准测试和测试工具,用于通过对网页发出请求来测试 Web 服务器的网站。 Siege 请求的每秒页数可以设置为从每秒几页到网站可以处理的最大页数。
通过突出显示首先耗尽的服务器资源和流量级别,此信息对于发现性能瓶颈非常有用。 有了这些信息,您就可以在现场站点出现故障之前更改服务器的配置或升级服务器的硬件。 此外,可以在模拟负载下测试常见的系统管理程序,例如备份,以确定它们对网站性能的影响。
在本指南中,我们将安装和配置 Siege 以在基准测试和浏览模式下运行。 基准测试模式发出 Web 服务器可以处理的尽可能多的请求,浏览模式模拟可配置数量的网站访问者。
因为使用 Firefox 配置通过代理服务器运行的 Internet 连接特别简单,所以我们将使用它通过 Sproxy 代理服务器连接到 Internet。 Sproxy 是专门为与 Siege 一起工作而创建的,它将通过它的每个请求的 URL 记录到一个文件中。 我们将使用该文件来告诉 Siege 要测试哪些 URL。
在本教程的第一部分,我们将安装 Sproxy 并配置 Firefox 以通过它连接到 Internet。 从那里,我们将生成一个 URL 列表以进行 Siege 测试,最后,我们将检查测试结果并确定性能瓶颈。
警告: 仅使用 Siege 测试您拥有或有权测试的网站。 在某些国家/地区,对未经授权的网站使用 Siege 可能被视为犯罪行为。
先决条件
为了完成本教程,您需要:
- 按照这个Ubuntu 16.04初始服务器设置教程设置一台Ubuntu 16.04服务器,包括sudo非root用户和防火墙。 请务必在初始服务器设置教程的 Step 7 中使用命令
sudo ufw allow 8080
打开端口8080
。 这是 Sproxy 默认监听的端口。 - 安装了火狐。 如果您在本地计算机上使用 macOS 或 Windows,则应从 Mozilla 官方网站 下载安装文件。 如果你使用 Linux,你应该使用你的包管理器或按照 Mozilla 的官方说明 安装 Firefox。 本教程包括使用 Firefox 版本 56 的说明。
- 您拥有或有权测试的网站,该网站可以公开访问,也可以从您安装 Siege 的服务器访问。
第 1 步 - 构建和安装 Sproxy
Sproxy 不能作为预打包的二进制文件提供,因此您必须从其官方网站下载它,然后从源代码构建它。
由于 Sproxy 的构建过程依赖于 Ubuntu 默认未安装的工具,因此您需要安装一些额外的软件包。
首先,更新您的软件包列表以确保您获得每个附加软件包的最新版本。
sudo apt-get update
然后,安装软件包。
sudo apt-get install build-essential libnet-ssleay-perl liburi-perl libwww-perl
build-essential
提供了在基于 Debian 的 Linux 发行版上构建软件所需的通用库和工具,而 libnet-ssleay-perl
、liburi-perl
和 libwww-perl
是用于Perl 编程语言,Sproxy 依赖它通过 SSL 建立连接、操作 URI 字符串以及与万维网交互。
现在,切换到您的主目录并从其官方网站下载 Sproxy 源代码存档。
cd ~ curl -O http://download.joedog.org/sproxy/sproxy-latest.tar.gz
然后,创建一个名为 sproxy
的目录来构建 Sproxy,并将源代码存档解压缩到新目录中。
mkdir sproxy tar -zxf sproxy-latest.tar.gz --strip-components=1 --directory="sproxy"
在这里, -zxf
选项告诉 tar 到 gunzip
并提取 sproxy-latest.tar.gz
文件的内容。 --strip-components=1
选项从每个文件名中去除第一个前导部分。 这会将存档解压缩到 sproxy
目录(由 --directory
选项指定)而不是 sproxy-1.02/sproxy/
。
现在,切换到 sproxy
目录以使用 configure
和 make
命令构建和安装 Sproxy。
cd sproxy ./configure make sudo make install
./configure
命令检查系统上是否存在所有必要的程序依赖项和构建工具。 make
命令然后构建程序二进制文件。 最后,make install
命令将新的二进制文件复制到它们在服务器上的正确位置。 由于 Sproxy 在 /usr/local/lib/sproxy/JoeDog
处创建了一个新目录,因此您需要以 root 权限运行 make install
。
最后,通过返回主目录以使用 -v
选项以详细模式启动 Sproxy 来测试 Sproxy 是否正常工作。
cd ~ sproxy -v
输出告诉您 Sproxy 正在侦听的端口、Sproxy 正在向其写入输出的文件的位置以及 Sproxy 将等待远程主机回复的秒数。
Sproxy OutputSPROXY v1.02 listening on port 9001 ...appending HTTP requests to: /user/urls.txt ...default connection timeout: 120 seconds
如果 Sproxy 无法启动,请查看终端中的消息以了解有关问题的信息。
确认一切正常后,使用 CTRL+C
停止 Sproxy。
Sproxy 现在可以使用了,所以让我们修改 Firefox 以通过 Sproxy 连接到 Internet,以便制作一个 URL 列表以使用 Siege 进行基准测试。
第 2 步 — 将 Firefox 配置为使用 Sproxy
我们现在将更改 Firefox 的网络配置,以通过 Sproxy 发送所有 Web 请求,生成 Siege 所需的基准测试目标列表。
因为我们希望 Sproxy 记录我们访问的每个 URL,所以我们还将清除 Firefox 的本地 Web 缓存。 Web 缓存是 Firefox 已经访问过的网站的图像和其他静态内容的本地存储。 默认情况下,Firefox 不会重新请求它已经缓存的网站资产。
修改网络设置
首先,更改 Firefox 主 Preferences 屏幕上 General 选项卡下的 Network Proxy 设置。
- 打开火狐。 (本教程包括 Firefox 版本 56 的说明。 其他版本见【X24X】火狐官方支持文档【X68X】。)
- 单击屏幕右上角的汉堡菜单,然后选择 Preferences 以转到 General 屏幕。
- 滚动到页面底部并找到 网络代理 部分。
- 单击设置…按钮打开连接设置面板。
在此面板中,将 Firefox 配置为通过您在 步骤 1 中安装的 Sproxy 服务器传递其所有请求。
- 选择手动代理配置。
- 在 HTTP 代理 字段中输入您的 Sproxy 服务器的公共 IP 地址。
- 在 Port 字段中将端口号设置为
8080
。 - 单击 OK 保存更改。
您现在已将 Firefox 配置为使用您的 Sproxy HTTP 代理服务器,因此您已准备好清除本地缓存。
清除本地缓存
Firefox 将本地缓存称为 离线网页内容 。 它位于 Firefox 的 Preferences 屏幕的 Privacy and Security 部分。
- 单击屏幕右上角的汉堡菜单,然后选择 Preferences 以转到 General 屏幕。
- 点击隐私及安全在屏幕的左侧。
- 滚动到页面底部并找到 离线 Web 内容和用户数据 部分,然后按 立即清除 按钮。
您的网络缓存现在是空的,因此 Firefox 遇到的每个基于 HTTP 的网站资产的地址都将传递给 Sproxy,直到该资产被重新缓存。
测试配置
Firefox 现在配置为通过 Sproxy 路由所有基于 HTTP 的请求,但您在 Step 1 结束时使用 CTRL+C
停止了 Sproxy。 因此,如果您现在尝试通过与 Firefox 的 HTTP 连接访问网站,您将看到一个错误页面。
如果您没有看到此错误消息,请验证您的 Firefox 设置是否与之前的屏幕截图匹配,并仔细检查您是否没有通过 HTTPS 连接到该网站。
当您想再次正常使用Firefox时,请重新跟踪之前的修改网络设置的说明,但是,这次选择连接设置上的无代理选项 面板。
现在我们已经将 Firefox 配置为通过 Sproxy 连接到 Internet,我们可以通过启动 Sproxy 并使用 Firefox 浏览目标网站来创建 URL 列表。
第 3 步 — 启动 Sproxy 并生成 URL 列表
在这一步中,我们将启动 Sproxy 服务器并使用 Firefox 浏览目标网站。 Sproxy 会将 Firefox 请求的每个基于 HTTP 的 URL 记录到一个文件中,我们稍后将在 Siege 中使用该文件。
首先,切换到您的主目录并启动 Sproxy。
cd ~ sproxy -v -t 180 -p 8080 -o mixed-urls.txt your_server_ip
-v
打印请求到终端的 URL。-t
是 Sproxy 等待远程主机响应的秒数。-p
是 Sproxy 将侦听的端口。-o
是 Sproxy 将 URL 写入的文件。your_server_ip
是 Sproxy 将绑定到的 IP 地址。
输出会立即告诉您正在运行的 Sproxy 版本、Sproxy 正在侦听的端口、Sproxy 正在将 URL 写入的文件以及 Sproxy 等待远程主机响应的时间量。 开始浏览测试网站后,输出还将包括 Sproxy 正在记录的网页的 URL。
Sproxy OutputSPROXY v1.02 listening on port 8080 ...appending HTTP requests to: mixed-urls.txt ...default connection timeout: 180 seconds http://www.example.com/ http://www.example.com/index.html http://www.example.com/about.html
注意: Sproxy 不支持HTTPS连接,所以你必须通过HTTP浏览你的测试站点才能生成URL列表。 但是,Siege 确实支持 HTTPS,并且在 步骤 5 中,我们将探索修改仅 HTTP 的 URL 列表以通过 HTTP 和 HTTPS 测试您的网站。
启动 Sproxy 后,返回 Firefox 并开始浏览目标站点。 Sproxy 会将 Firefox 请求的每个 URL 写入 mixed-urls.txt
文件,同时将 URL 打印到终端。
访问完所有计划测试的网页后,使用 CTRL+C
停止 Sproxy。
现在,Firefox 在测试网站上遇到的每个基于 HTTP 的 URL 的 mixed-urls.txt
文件中都有一个列表。 下一步是删除任何无法解析到您网站的 URL,以确保您仅对授权域使用 Siege。
第 4 步 — 清理 URL 文件
现代网站通常在多个位置托管内容。 此内容可能是托管在内容交付网络 (CDN) 上的图像或托管在 Google 等第三方服务上的字体。 当我们运行 Siege 时,我们希望确保我们只对我们有权测试的域进行基准测试。 因此,我们必须删除 mixed-urls.txt
文件中所有不指向目标网站的 URL。
使用 grep,一种针对用户指定的 正则表达式 搜索纯文本输入的实用程序,仅查找与您的测试域匹配的 URL,然后 将结果 重定向到一个名为 urls.txt
的新文件。
grep -a "^http://www.example.com" mixed-urls.txt > urls.txt
-a
标志告诉 grep 将二进制文件视为文本文件。 这是必要的,因为浏览器有时会发出包含二进制数据的 POST 请求,然后 Sproxy 会将其写入 mixed-urls.txt
。 如果 mixed-urls.txt
中有二进制数据,则 grep 会在没有 -a
标志的情况下失败。
在正则表达式术语中,^
字符表示字符串必须以 http://www.example.com
开头才能被视为匹配项。
此命令不会在终端中产生任何输出,但会创建一个名为 urls.txt
的新文件。
现在,打开 urls.txt
以确保每一行都以您的测试网站的域名开头,并删除所有不是的行。
nano urls.txt
完成编辑后保存更改并关闭文件。
您的 URL 列表现在仅包含您有权测试的那些 URL,因此我们已准备好安装 Siege。 如果您还想通过 HTTPS 对您的网站进行基准测试,请按照 步骤 5 中的可选说明创建包含您的 URL 的 HTTPS 版本的第二个 URL 文件。
第 5 步 — 创建 HTTPS URL 文件(可选)
许多网站同时通过 HTTP 和 HTTPS 运行,甚至仅通过 HTTPS 运行,因此您也可以通过 HTTPS 对您的网站进行基准测试,这一点很重要。 这是Siege可以做到的。 你只需要给它一个以 https
开头的 URL 列表。
首先,使用 cat
命令打开 urls.txt
并将其内容传递给 sed,一个用于解析和转换文本的实用程序。 sed 会将 http
的所有实例替换为 https
并在终端中显示结果。
cat urls.txt | sed 's|http|https|'
输出将与您在 urls.txt
文件中已有的 URL 列表相同,只是每个输出的 URL 都以 https
开头。
Example Outputhttps://www.example.com/ https://www.example.com/index.html https://www.example.com/about.html
验证输出后,重新运行命令,这次将输出写入一个名为 urls-https.txt
的新文件。
cat urls.txt | sed 's|http|https|' > urls-https.txt
该命令不会对终端产生任何输出,因为它已全部重定向到 urls-https.txt
。
现在我们有了更新的 URL 列表,我们准备安装 Siege 并开始测试。
第 6 步 — 使用 Siege 进行基准测试和测试
在开始测试您的网站之前,您必须先安装 Siege。
Siege 可从标准的 Ubuntu 软件包存储库中获得,因此请使用 apt-get
安装它。
sudo apt-get install siege
Siege 有两种操作模式:internet 和 benchmark。 Internet 模式模拟浏览目标网站的访问者,而基准模式则以 Web 服务器可以处理的速度发出请求。 我们将首先在互联网模式下运行 Siege。
Internet 模式有利于通过随着时间的推移增加同时访问者的数量来缓慢地增加服务器上的负载。 此模式还可以创建长时间的持续负载,如果您需要了解在创建备份等操作期间网站性能发生了什么变化,这将非常有用。
切换到您的主目录并以 Internet 模式启动 Siege。 如果您想针对仅 HTTP 的地址进行测试,请将 urls_file
替换为 urls.txt
。 如果您遵循 Step 5 并希望针对 HTTPS 地址进行测试,请将 urls_file
替换为 urls-https.txt
。
cd ~ siege --internet --concurrent=5 --time=30S --log="siege-internet.log" --file="urls_file"
--internet
将 Siege 设置为互联网模式。--concurrent
是要模拟的访客数量。 在这个例子中,我们告诉 Siege 模拟 5 个并发用户来产生一些流量而不会使服务器不堪重负。 随着您越来越熟悉服务器的功能,您可以根据需要增加此数字。--time
是 Siege 将运行多长时间。 该值可以用S
设置为秒,M
设置为分钟,H
设置为小时。 在这个例子中,我们再次让 Siege 运行 30 秒,以产生一些流量而不会使服务器不堪重负。 将来,您可以尝试不同的时间长度,以查看您的服务器如何响应持续的流量负载。--log
是您希望 Siege 将其测试结果写入的位置的路径。 默认情况下,此位置是/var/log/siege.log
并且需要 sudo 权限。--file
是包含 Siege 将用于测试的 URL 的文件的路径。
当您第一次启动 Siege 时,它会报告您正在使用的版本号以及它正在模拟的并发用户数。 然后,它会告诉您测试已经开始。
Siege Output at Start of Run** SIEGE 3.0.8 ** Preparing 5 concurrent users for battle. The server is now under siege...
一旦 Siege 完成运行或以 CTRL+C
终止,它还将显示测试结果以及结果日志文件的位置。
Siege Output at End of Run... Lifting the server siege... done. Transactions: 157 hits Availability: 100.00 % Elapsed time: 29.72 secs Data transferred: 0.15 MB Response time: 0.49 secs Transaction rate: 5.28 trans/sec Throughput: 0.01 MB/sec Concurrency: 2.59 Successful transactions: 161 Failed transactions: 0 Longest transaction: 0.74 Shortest transaction: 0.27 FILE: siege-internet.log You can disable this annoying message by editing the .siegerc file in your home directory; change the directive 'show-logfile' to false.
由于输出中包含的统计数据很复杂,我们将在 Step 7 中深入探讨它们。
现在,让我们在基准模式下运行 Siege,以发现站点一次能够提供的最大页面请求数。 在尝试确定哪些附加技术可以提高您网站的性能时,这是有用的信息。 此外,基准模式可以突出资源瓶颈,正如我们在 步骤 8 中更仔细地检查此模式时所看到的。
再次启动 Siege,这次是在基准模式下,使用 --benchmark
而不是 --internet
。
siege --benchmark --time=30S --log="siege-benchmark.log" --file="urls_file"
输出与之前的格式相同,只是这次结果不同,因为模式不同。
Siege Output** SIEGE 3.0.8 ** Preparing 5 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 444 hits Availability: 100.00 % Elapsed time: 29.72 secs Data transferred: 18.16 MB Response time: 0.49 secs Transaction rate: 105.28 trans/sec Throughput: 4.41 MB/sec Concurrency: 14.14 Successful transactions: 421 Failed transactions: 0 Longest transaction: 0.74 Shortest transaction: 0.27 FILE: siege-benchmark.log You can disable this annoying message by editing the .siegerc file in your home directory; change the directive 'show-logfile' to false.
与互联网模式的统计数据一样,基准模式的统计数据也很复杂。 我们将在 Steps 7 和 8 中深入探讨它们。
既然我们已经使用 Siege 对您的站点进行了测试和基准测试,我们可以更详细地探索输出并实际使用统计数据。
第 7 步 - 了解 Siege 的结果
在了解您的网站性能、识别瓶颈以及决定将升级工作重点放在哪里时,Siege 可以成为一项强大的资产。 它提供的统计数据涵盖了一系列指标,可以让您深入了解网站的整体健康状况。
正如我们在 Step 6 中看到的,Siege 的输出通常如下所示:
Siege Output at End of Run... Transactions: 904 hits Availability: 97.41 % Elapsed time: 4.59 secs Data transferred: 4.37 MB Response time: 0.07 secs Transaction rate: 196.95 trans/sec Throughput: 0.95 MB/sec Concurrency: 12.86 Successful transactions: 904 Failed transactions: 24 Longest transaction: 1.95 Shortest transaction: 0.00 ...
具体来说,这些指标意味着:
Transactions
是 Siege 发出的请求总数。Availability
是 Web 服务器响应的请求的百分比,包括 4xx 和 5xx 级别的 HTTP 错误代码 。Elapsed time
是测试运行了多长时间。Data transferred
是 Siege 用于测试站点的总带宽。Response time
是 Web 服务器响应请求所用的平均时间。Transaction rate
是 Web 服务器每秒服务的平均事务数。Throughput
是 Web 服务器每秒提供的数据量。Concurrency
是同时打开的平均连接数。Successful transactions
是响应小于 400 的 HTTP 状态代码 的事务总数。Failed transactions
是响应 HTTP 状态代码 大于 400 的事务总数。Longest transaction
是最长请求完成的时间。Shortest transaction
是最短请求完成的时间。
Transaction rate
和 Failed transactions
为您的 Web 服务器的整体健康状况提供了最快的试金石。
Transaction rate
代表您网站的速度,因为它是您的网络服务器每秒可以提供的页面数。 这个数字越高,您的网站可以处理的访问者越多,访问者收到每个页面的速度就越快。 如果您使用 Siege 来提高网站的总体响应能力,那么这就是您想要增加的数字。
Failed transactions
值是指来自 Web 服务器的任何包含错误代码的响应,例如 503 Service Unavailable
。 这些错误通常指向诸如数据库无法处理其接收的请求数量或 Web 服务器内存不足等问题。 如果这个数字不是零,您应该查看您的 Web 服务器的日志文件,以准确了解发生了哪些错误,并了解如何解决这些问题。
当您进行更改以随着时间的推移增加 Transaction rate
并减少 Failed transactions
时,还记得查看您在每次运行 Siege 时创建的日志文件,因为它包含您看到的所有相同统计信息在您的终端以及测试的日期和时间。 这将帮助您跟踪您的努力的整体轨迹。
现在我们已经检查了 Siege 的输出以确定您的 Web 服务器的速度和稳健性,是时候看看我们如何使用这些相同的信息来识别和消除性能瓶颈了。
第 8 步 - 识别性能瓶颈
在基准模式下,Siege 每秒发出的请求数量与 Web 服务器能够提供的服务一样多。 当服务器达到它可以服务的最大页面数时,它已达到 资源限制 。
最有可能受到影响的四种资源是:
- 内存
- 中央处理器
- 磁盘
- 网络带宽
为了充分利用基准测试模式,您需要在 Siege 的同时运行几个额外的工具,这样您就可以在 Siege 增加其测试负载时监控系统中发生的情况。
您可以使用 top 监控前三种资源——RAM、CPU 和磁盘使用情况,该工具提供系统资源的动态、实时视图。
Ubuntu默认自带top,所以不需要安装。 只需运行命令 top
。
顶部显示的信息分为两部分。
Sample top Outputtop - 21:02:32 up 50 min, 1 user, load average: 0.07, 0.02, 0.00 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 37.3 us, 7.3 sy, 0.0 ni, 99.3 id, 8.3 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1015200 total, 63536 free, 431456 used, 520208 buff/cache KiB Swap: 0 total, 0 free, 0 used. 512308 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3249 www-data 20 0 469592 92276 33488 D 24.6 9.1 0:05.01 apache2 3239 www-data 20 0 442836 75080 41896 S 5.6 7.4 1:31.97 apache2 3572 www-data 20 0 424372 35272 21164 S 4.0 3.5 0:02.69 apache2
上半部分由前五行输出组成,显示当前系统使用情况的摘要。
下半部分显示了当前在系统上运行的各个服务器进程的列表以及每个进程的标识号、所有者、优先级、nice 值、虚拟内存使用、物理内存使用、共享内存使用、状态、CPU 使用百分比、内存使用百分比、活动总时间和名称。
虽然 top 是 管理进程 和 监控 CPU 使用 的有用工具,但在这种情况下,我们想看看它在 Siege 基准测试的胁迫下能告诉我们关于我们系统的什么信息.
CPU 使用情况为 %Cpu(s): 37.3 us, 7.3 sy,
。 这些值告诉我们,用户进程正在消耗 37.3% 的 CPU,而系统进程正在消耗 7.3%。 如果将这两个值相加,您将获得总 CPU 使用率。
如果您的服务器以 100% 或接近 100% 的 CPU 使用率运行,请检查进程列表中的顶部条目,以查看是否有一个或多个正在消耗异常大量的 CPU。 如果是这样,请考虑重新配置或微调进程以使用更少的 CPU。 如果这不可能,您可能需要升级服务器上的 CPU。
现在,让我们检查内存使用情况。
Sample top Outputtop - 21:02:32 up 51 min, 1 user, load average: 0.21, 0.47, 0.80 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 17.4 us, 3.4 sy, 0.0 ni, 79.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 991.406 total, 223.914 free, 395.621 used, 371.871 buff/cache MiB Swap: 0.000 total, 0.000 free, 0.000 used. 526.156 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3249 www-data 20 0 469592 92276 33488 D 24.6 9.1 0:05.01 apache2 3239 www-data 20 0 442836 75080 41896 S 5.6 7.4 1:31.97 apache2 3572 www-data 20 0 424372 35272 21164 S 4.0 3.5 0:02.69 apache2
默认情况下,第四行以千字节为单位显示 RAM 使用情况。 在前面的示例输出中,我们已经按下 SHIFT+E
一次,将值转换为兆字节以使数字更易于使用。 再次按 SHIFT+E
将值转换为千兆字节,然后继续按 SHIFT+E
循环回到默认千字节显示。
total
值是服务器上可用的内存总量。 请记住,内核在启动时会保留一些内存,因此一台 1024 MB 的机器将在此处显示 991 MB 的内存。
avail Mem
显示系统上的剩余内存量。 随着使用更多 RAM,这个数字会变小,当服务器上没有剩余内存时,这个数字最终会变为零。
与 CPU 使用率一样,如果 avail Mem
以零或接近零的速度运行,请检查进程列表以查找消耗异常大量内存的条目。 如果可能,重新配置或微调这些进程以使用更少的内存或升级服务器上的 RAM 量。
最后,让我们看看磁盘使用情况。
Sample top Outputtop - 21:02:32 up 52 min, 1 user, load average: 0.21, 0.47, 0.80 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 17.4 us, 3.4 sy, 0.0 ni, 79.2 id, 31.6 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1015200 total, 63536 free, 431456 used, 520208 buff/cache KiB Swap: 0 total, 0 free, 0 used. 512308 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3249 www-data 20 0 469592 92276 33488 D 24.6 9.1 0:05.01 apache2 3239 www-data 20 0 442836 75080 41896 S 5.6 7.4 1:31.97 apache2 3572 www-data 20 0 424372 35272 21164 S 4.0 3.5 0:02.69 apache2
我们感兴趣的磁盘使用情况,I/O 等待,不是有多少可用磁盘空间,而是有多少磁盘访问会降低服务器的速度。 磁盘访问,尤其是在使用旋转盘片硬盘的服务器上,非常慢,并且每当服务器访问磁盘时,CPU 必须等待信息被检索。
Top 将此信息报告为 wa
值。 它表示 CPU 空闲等待来自磁盘的数据的时间百分比。 该数字应尽可能接近 0.0。
在前面的示例中,wa
值为 31.6
。 这意味着 CPU 将三分之一的时间用于等待来自磁盘的数据。 这是一个很大的时间,它会严重影响网站的性能。
I/O 等待通常是访问磁盘以获取文件或重复调用本地数据库的结果。 如果 wa
远大于 0.0,请考虑将静态资源移动到远程位置,例如内容交付网络 (CDN),或研究减少应用程序访问其相关本地数据库的次数的方法。
按 Q
退出顶部。
我们将查看的最后一个资源是网络使用情况。 为了监控这一点,我们将使用 Bandwidth Monitor New Generation 工具。
使用 apt-get
安装此工具,然后使用命令 bwm-ng
运行它。
sudo apt-get install bwm-ng bwm-ng
输出的顶部显示 Bandwidth Monitor New Generation 的版本号、数据更新频率(默认每 0.5 秒)、用于确定可用网络接口的输入源(/proc/net/dev
默认开启Linux),并显示统计信息(默认情况下数据使用 rate
)。
输出的底部包括一个表格,报告每个网络接口的传入数据量 (Rx
)、传出数据量 (Tx
) 和总数据量 (Total
) .
最后一行显示所有网络接口的总值。
Sample bwm-ng Output bwm-ng v0.6.1 (probing every 0.500s), press 'h' for help input: /proc/net/dev type: rate - iface Rx Tx Total ============================================================================== lo: 0.00 KB/s 0.00 KB/s 0.00 KB/s eth0: 30.99 KB/s 499.11 KB/s 530.11 KB/s ------------------------------------------------------------------------------ total: 30.99 KB/s 499.11 KB/s 530.11 KB/s
当网络带宽造成瓶颈时,通常是因为 Tx
已满。 要解决此问题,请从托管服务提供商处获取服务器的连接速度,并将其与 bwm-ng
显示的速度进行比较。 如果 bwm-ng
显示的速度始终处于或接近服务器可用的最大带宽,那么您将需要考虑升级您的托管计划或完全转移到不同的提供商。
测试完成后按 CTRL+C
退出 Bandwidth Monitor New Generation。
结论
在本指南中,我们使用 Siege 基准测试工具和 Sproxy 代理服务器在 Web 服务器上生成可配置负载并将其推送到最大吞吐量。 这些工具对于任何网站部署都非常有用,因为它们有助于查明性能问题并计划明智的升级。
有关减少磁盘 I/O 和内存瓶颈的另一种方法,请查看 Varnish HTTP Cache。 Varnish 是一种易于使用的反向代理,可存储静态网站资产,减少 RAM 使用和磁盘 I/O。
如果您的网站使用 PHP,请考虑安装 PHP-FPM 作为标准 PHP 实现的替代方案。 PHP-FPM 降低了为基于 PHP 的网页提供服务的 CPU 需求,从而加快了整个网站的速度。