Eri*_*wan 12 nginx reset tcp high-load
我有一个带有 nginx 的小型 VPS 设置。我想从中榨出尽可能多的性能,所以我一直在尝试优化和负载测试。
我正在使用 Blitz.io 通过获取一个小的静态文本文件来进行负载测试,并遇到一个奇怪的问题,即一旦同时连接的数量达到大约 2000,服务器似乎正在发送 TCP 重置。我知道这是一个非常大量,但使用 htop 后,服务器在 CPU 时间和内存方面仍有大量空闲时间,所以我想找出这个问题的根源,看看我是否可以进一步推动它。
我在 2GB Linode VPS 上运行 Ubuntu 14.04 LTS(64 位)。
我没有足够的声誉直接发布此图表,因此这里是 Blitz.io 图表的链接:

以下是我为找出问题根源所做的工作:
worker_rlimit_nofile设置为 8192nofile设置为64000为硬性和软性限制root和www-data用户(什么nginx的运行为)/etc/security/limits.conf没有任何迹象表明有任何问题/var/log/nginx.d/error.log(通常,如果您遇到文件描述符限制,nginx 会打印错误消息,这样说)
我有 ufw 设置,但没有速率限制规则。ufw 日志表明没有任何内容被阻止,我尝试禁用 ufw 并得到相同的结果。
/var/log/kern.log/var/log/syslog我已将以下值添加到/etc/sysctl.conf并加载它们sysctl -p,但没有任何效果:
net.ipv4.tcp_max_syn_backlog = 1024
net.core.somaxconn = 1024
net.core.netdev_max_backlog = 2000
Run Code Online (Sandbox Code Playgroud)有任何想法吗?
编辑:我做了一个新的测试,在一个非常小的文件(只有 3 个字节)上增加到 3000 个连接。这是 Blitz.io 图表:

同样,根据 Blitz,所有这些错误都是“TCP 连接重置”错误。
这是 Linode 带宽图。请记住,这是 5 分钟的平均值,因此它被低通过滤了一点(瞬时带宽可能要高得多),但是,这没什么:

中央处理器:

输入/输出:

这里是htop附近的测试结束:

我还在一个不同的(但看起来相似的)测试中使用 tcpdump 捕获了一些流量,当错误开始出现时开始捕获:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
这是文件,如果有人想看一下(~20MB):https : //drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view ?usp =sharing
这是来自 Wireshark 的带宽图:
(线是所有数据包,蓝条是TCP错误)
根据我对捕获的解释(我不是专家),看起来 TCP RST 标志来自负载测试源,而不是服务器。因此,假设负载测试服务方面没有问题,假设这是负载测试服务和我的服务器之间某种网络管理或 DDOS 缓解的结果是否安全?
谢谢!
请TIME_WAIT使用命令查看有多少个端口处于状态netstat -patunl| grep TIME | wc -l,并将其更改net.ipv4.tcp_tw_reuse为 1。
| 归档时间: |
|
| 查看次数: |
14578 次 |
| 最近记录: |