我已经用 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())
我可以使用什么工具/方法来缩小造成这个低谷的原因?
更新
正如@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 秒,并且看不到低谷,但将实际数据复制到磁盘后仍然可以看到,那么您可以继续排除磁盘故障。如果您尝试了各种缓冲区/套接字大小,仍然看到下降,那么我的下一步将是数据包捕获。
在虚拟主机上:
tcpdump -i <interface> -vvv -nn -s0 port 12865 -w /desiredDir/troughTest.cap
netserver
- 来自客户:
netperf -H <serverIP> -f M -l 300 -- -s 4194304
让它运行一段时间,然后按 ctrl-c 或在您认为数据包足够时将其终止。最后,按 ctrl-c 您的 tcpdump,将您的 /desiredDir/troughTest.cap 文件传输到您的笔记本电脑/工作站,如果尚未安装 wireshark,请安装它,分析数据包