Sparkle Public Tracker 欢迎各位尝试测试

看了下,不能关闭 netfilter 和 iptables,关掉的话 docker 容器都得趴窝,但不幸的是 Sparkle 架构高度依赖 Docker,还会影响其他服务。

作为替换,我做了一些修改:

  • 修改了 net.ipv4.tcp_max_orphans 的值到 10000
  • IPV6 的没有更改,因为只用 IPV4
  • 将服务端口的 PREROUTING 和 OUTPUT 改成了 NOTRACK

可以再试试

我怀疑可能和 Waiting 耗尽有关

net.ipv4.tcp_max_orphans 要修改的话,我上面发过的建议值是100000

试了一下,没什么用,感觉 nginx 还是系统哪里卡着连接数
连接数提升到一定数量后,似乎就直接拒绝 CloudFlare 的连接了,CF 会显示 Web server is returning an unknown error

还有个限制是1024打开文件数,帖子上也有说过,跟着命令确认下是否修改成功

解决了,就是 Nginx 自己有点问题,换成了 Tengine,Tengine 杀死了比赛

很多年前就说过nginx静态处理性能特别烂,虽然烂但是你这么高的CPU处理这点请求不至于出问题,肯定是内核上的限制吧
image

3.5K爆感觉就和我帖内说的1024限制差不多,1024的极限实际上是4124
https://bbs.itzmx.com/thread-109876-1-1.html
文中一句话(有一些情况下,ulimit 触发4124限制后,内核并不会给出dmesg日志信息所以很难找到问题)

ulimit 的问题我已经检查过了,它已经被修改为了 1048576。但可能 docker 覆写了这个值

所以帖内给了个pid进程的查看方法,精准到进程

1個讚

旧的容器还没有删除,你可以看到它已经修改了,我已经检查过了,不是 fd 导致的问题

你的容器pid是1?

对的 docker 中的主进程 PID 就是 1

在宿主机上看这个进程呢?

docker 容器的 ulimit 可以和宿主机不同,但我没有做特殊改动,所以它们现在保持同步

那你这个确实不是ulimit的问题,docker内和宿主机上都已经修改成功了

顺带一提,换到 Tengine 后之前会导致 502 的配置文件现在再用已经不会出问题了,重定向终于可以正常工作了。

再来一次测试吧,现在看着指标好多了

你看看现在还会不会爆

好像爆了,返回503和522无法建立和源服务器连接

爆了,但这次和 nginx 没关系了,我这里不走 nginx 的 portainer 也无法建立连接了,可以暂停一下了
还是 OS 的哪里有点问题

CF 回源连接数 7w8,应该是把什么东西跑满了,值得一提的是 NOTRACK 后,irq 的占用也好多了

刚刚一波的 QPS 是 3507

防火墙加 NOTRACK 参数居然能跳过nf模块吗,至少我知道是禁用防火墙后nf驱动模块就不会加载了,彻底避免了这个防火墙引发的性能问题

不能完全跳过,但能显著降低负载