Yuj*_*ita 14 performance nginx apache-2.2
我错误地认为我的内部 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 服务器设置之上添加一个 nginx 负载均衡器来提高我的 180RPS,LB 后面的每台服务器正好是 180RPS。
2:如果 linode 有 50/100mbit 的限制而我根本没有达到,那么我必须通过我的单服务器设置来达到该限制。如果我可以在本地以足够快的速度读取/传输数据,而 linode 甚至不屑于拥有 50mbit/100mbit 的上限,那么一定有内部瓶颈不允许我达到那些我不确定如何检测的上限。正确的?
我意识到这个问题现在很大而且很模糊,但我不知道如何浓缩它。对于我做出的任何结论,任何意见都表示赞赏。
问题是我假设 linode.com 图表峰值是真正的峰值。事实证明,图表使用了 5 分钟的平均数据点,因此我的峰值似乎是 24 兆位,而实际上我达到了 50 兆位的上限。
现在他们已将其提高到 100 兆位,我的基准立即上升到新的出站流量限制。
要是我早点注意到就好了!我的很多推理都取决于我没有因为该图表而达到出站流量限制的想法。
现在,我达到每秒 370 个请求的峰值,刚好低于 100mbps,此时我开始收到请求的“积压”,并且响应时间开始增加。
我现在可以通过缩小页面来增加最大并发;启用 gzip 后,我得到 600RPS。
当我突然达到峰值并且待处理请求的积压(受带宽限制)开始累积时,我仍然会遇到问题,但这听起来像是一个不同的问题。
在优化/阅读这些数据/缩小可能的问题范围方面,这是一个很好的教训。非常感谢您的意见!
现在你明白这一点有点晚了......但也许你应该考虑时不时地阅读 ServerFault 博客。
我特别想到这篇文章,其中他们讨论了为什么一秒的轮询间隔不会时不时地减少它,这与您遇到的问题非常相似。
我们发现我们在 1 Gbit/s 接口上非常频繁地丢弃数据包,速率仅为 10-30 MBit/s,这损害了我们的性能。这是因为 10-30 MBit/s 速率实际上是转换为一秒速率后每 5 分钟传输的位数。当我们深入研究 Wireshark 并使用一毫秒 IO 图形时,我们发现我们经常会突发所谓的 1 Gbit/s 接口的每毫秒 1 Mbit 的速率。
当然让我思考。我只知道我一有机会就会在我店里的其他 SA 上解决这个问题,并且当我们遇到这个问题时,我会显得非常聪明和敏锐。
谁知道呢,我什至可能会让他们中的一些人知道这个秘密。:)
归档时间: |
|
查看次数: |
1277 次 |
最近记录: |