我错误地认为我的内部 AB 测试意味着我的服务器每秒可以处理 1k 并发 @3k 命中。
我目前的理论是网络是瓶颈。服务器无法足够快地发送足够的数据。
来自 blitz.io 的 1k 并发的外部测试显示我的命中/秒上限为 180,页面响应时间越来越长,因为服务器每秒只能返回 180。

我已经从 nginx 提供了一个空白文件并将其固定:它以 1:1 的并发比例扩展。

现在为了排除 IO / memcached 瓶颈(nginx 通常从 memcached 中提取),我从文件系统提供了缓存页面的静态版本。

结果与我原来的测试非常相似;我的上限约为 180 RPS。
将 HTML 页面一分为二使 RPS 翻倍,因此它绝对受页面大小的限制。

如果我从本地服务器内部使用 ApacheBench,我会在高传输速率下在整页和半页上获得大约 4k RPS 的一致结果。传输速率:62586.14 [Kbytes/sec] 接收
如果我从外部服务器 AB,我得到大约 180RPS - 与 blitz.io 结果相同。
我怎么知道这不是故意节流?
如果我从多个外部服务器进行基准测试,所有结果都会变得很差,这让我相信问题出在我的服务器出站流量上,而不是我的基准测试服务器 / blitz.io 的下载速度问题。
所以我回到我的结论,我的服务器不能足够快地发送数据。
我对吗?还有其他方法可以解释这些数据吗?是设置多台服务器+负载均衡的解决方案/优化,每个服务器每秒可以提供180次点击?
我对服务器优化很陌生,所以我很感激解释这些数据的任何确认。
出站流量
以下是有关出站带宽的更多信息: 网络图显示最大输出为 16 Mb/s:每秒 16 兆位。听起来一点也不像。
由于一个关于节流的建议,我调查了这个,发现 linode 有一个 50mbps 的上限(我什至没有接近击中,显然)。我把它提高到100mbps。
由于 linode 限制了我的流量,而我什至没有达到它,这是否意味着我的服务器确实应该能够输出高达 100mbps 但受到其他一些内部瓶颈的限制?我只是不明白如此大规模的网络是如何工作的;他们真的能像从硬盘读取数据一样快地发送数据吗?网管有那么大吗?

1:基于上述,我想我绝对可以通过在多 nginx …
我的服务器(一个 linode VPS)昨天突然开始在每次请求时超时。
我在网络方面非常缺乏经验,很想学习调试这些连接问题的过程。
让我感到困惑的是,昨天,有些人(我的手机、我在家、家里的朋友)可以一直访问该站点,我看到netstat已经建立了连接。我禁用了防火墙并将 iptables 设置为接受所有连接,以排除将我们的 IP 列入黑名单的任何奇怪的自动规则。我不确定它是否相关,但是来自本地网络的 traceroute 超时 - 来自外部某些机器的 traceroute 找到了我的服务器。
通过与运行正常的开发服务器上的设置进行比较,我确认了各种设置是正确的。
以下文件与我的开发环境匹配(除了它们各自的 ip 地址):
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/networking/interfaces
ifconfig
Run Code Online (Sandbox Code Playgroud)
Apache 正在侦听端口 80,设置看起来与我正在运行的服务器完全相同。
# server that doesn't work:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22008/apache2
tcp 0 0 69.164.201.172:80 71.56.137.10:57487 SYN_RECV -
# server that does work
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3334/apache2
tcp 0 0 72.14.189.46:80 71.56.137.10:57490 ESTABLISHED 20931/apache2
Run Code Online (Sandbox Code Playgroud)
每次加载页面时,都会netstat -an | grep :80显示处于 SYN_RECV 状态的所有连接。
tcp 0 0 …Run Code Online (Sandbox Code Playgroud) 我正在使用 linode VPS,我刚刚将我的一台服务器克隆到我的开发服务器,就像我之前多次做过的那样。
像往常一样,在正确更新SSH之前无法访问。/etc/network/interfaces我通过 ssh 和基于 Web 的 ajax 控制台登录 linode lish shell。
我尝试修改接口文件,但光标位置似乎错误。我将开始修改一行,另一行的内容会突然出现。保存并打开文件,结果发现我什至没有在那一行上写字!或者,在我尝试输入一些文本之前,我刚刚写的行甚至不可见。
bug 行为在 nano 和 vim 中是一致的。
我会联系支持人员,但在紧急情况下他们并不总是在场。这里有什么想法吗?
这是怎么回事?我应该去哪里调试这个?我很高兴这不是生产环境问题。我的接口文件是 foobared,我什至无法注释掉正确的行。

apache-2.2 ×2
debugging ×1
linode ×1
linux ×1
networking ×1
nginx ×1
performance ×1
tcp ×1
terminal ×1
vi ×1
vim ×1