分析临时带宽崩溃的方法/工具

分析临时带宽崩溃的方法/工具

我已经用 mechanize 的 python 端口测试了我的服务器¹-多机械化。我进行了几次非常简单的测试 - 但上传带宽总是从 10mbits 降到几 KB。我不知道为什么。


无论我跑 3 分钟、15 分钟还是 30 分钟,结果都没有什么不同。总是带宽在 110 到 120 秒之间几乎降至零,如下面的分析所示。我选择了一条短距离,因此更容易发现下降。

检查 htop 后没有发现任何异常,核心运行速度在 2% 到 7% 之间。
内存使用率始终在 2048mb 保证内存的 1000mb (+-100) 左右。

当我检查 iftop 时,没有什么特殊情况,但上传速度从 10mbits 下降到几千字节,持续约 10 秒(110-120 秒)

所有 cronjobs/不必要的任务均已禁用。所有页面(前端/随机)均可用。每个请求都由 http 响应代码 200 回答。Apache 和 MySQL 错误日志为空。

由于我是一名边做边学的管理员,我不确定是否还有更多相关信息。加载的 apache mods 是否相关?希望我提到了所有重要事实。

配置文件

[global]
run_time = 180
rampup = 0
results_ts_interval = 10
progress_bar = on
console_logging = off
xml_report = off


[user_group-1]
threads = 10
script = frontpage.py

[user_group-2]
threads = 10
script = randompost.py

首页

import mechanize

class Transaction(object):
    def run(self):
        br = mechanize.Browser()
        br.set_handle_robots(False)

        resp = br.open('http://host.domain.tld/')
        resp.read()

        assert (resp.code == 200), 'Bad Response: HTTP %s' % resp.code
        assert ('Example Web Page' in resp.get_data())

随机帖子.py

实际上和 frontpage 一样,但包含随机页面

import mechanize
import random

pages = [
'...',
'...',
'...',
# ...
]

class Transaction(object):
    def run(self):
        br = mechanize.Browser()
        br.set_handle_robots(False)

        resp = br.open(random.choice(pages))
        resp.read()

        assert (resp.code == 200), 'Bad Response: HTTP %s' % resp.code
        assert ('Example Web Page' in resp.get_data())

经过时间/响应时间(秒) 经过时间/响应时间(秒) 已用时间/tps




我可以使用什么工具/方法来缩小造成这个低谷的原因?


更新

正如@linuxdevops 提到的,我尝试使用 scp 和 ftp 下载文件。我的测试包括一个 10mb 的文件和我网站的文件夹 - 这意味着许多文件大小从 1-1xx kb 不等。传输没有中断,也没有出现任何明显的落后。我不确定是否有更专业的方法来判断一致性FTP / SCP 传输。

¹ 虚拟主机规格

  • 3 个 vcore,频率为 1.5ghz
  • 2048 mb 内存(保证,无动态内存)
  • 100兆比特带宽
  • centos 6.5 32位
  • 阿帕奇 2.2.15

答案1

一个好的起点是使用像 netperf 这样的工具。通过 Google 找到它

  • 在虚拟主机上启动 netserver 二进制文件
  • 从你的客户端运行 netperf:netperf -H <serverIP> -f M -l 240 -- -s 4194304

    • -f M(以 MB/s 为单位显示输出)
    • -l (长度以秒为单位)
    • --(两个破折号后面是选项)
    • -s(插座尺寸)

这是找到正确套接字/缓冲区大小的简单方法。例如,Windows 中的默认套接字大小仅为 8192。使用拖放进行复制将使用此默认大小,最大速度约为 22 MB/s。一旦将其增加到 64k,您将开始看到 100-120 MB/s。如今,大多数软件都允许您更改此设置,或者会对其测试的最佳点进行硬编码。因此,如果使用 winscp、filezilla 或任何实用程序进行这些文件传输,则您需要检查 Linux 中的 TCP 缓冲区和 Windows 中的 winsock 缓冲区。

Linux 示例:/etc/sysctl.conf

  • net.ipv4.tcp_rmem = 4194304 4194304 4194304
  • net.ipv4.tcp_wmem = 4194304 4194304 4194304

视窗:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters

  • DefaultReceiveWindow = 65536
  • DefaultSendWindow = 65536

重启

如果您可以运行 netperf 超过 120 秒,并且看不到低谷,但将实际数据复制到磁盘后仍然可以看到,那么您可以继续排除磁盘故障。如果您尝试了各种缓冲区/套接字大小,仍然看到下降,那么我的下一步将是数据包捕获。

在虚拟主机上:

  1. tcpdump -i <interface> -vvv -nn -s0 port 12865 -w /desiredDir/troughTest.cap
  2. netserver
  3. 来自客户:netperf -H <serverIP> -f M -l 300 -- -s 4194304

让它运行一段时间,然后按 ctrl-c 或在您认为数据包足够时将其终止。最后,按 ctrl-c 您的 tcpdump,将您的 /desiredDir/troughTest.cap 文件传输到您的笔记本电脑/工作站,如果尚未安装 wireshark,请安装它,分析数据包

相关内容