Sparkle Public Tracker 欢迎各位尝试测试

防火墙要开的话,一定要把内核参数优化,否则会随机丢包 /etc/sysctl.conf
net.netfilter.nf_conntrack_max = 9999999
net.netfilter.nf_conntrack_buckets = 1048576

还有帖子上提到的tcp丢包,高并发下centos以外的新系统默认锁4kqps上限,可以改成10w(centos默认为26w)
net.ipv4.tcp_max_orphans = 100000

感觉和跟踪连接数没有太大的关系,后端是支持 HTTP/2 的,CloudFlare 的边缘服务器应该是会复用连接的

服务恢复了,我看一下数据面板

当前设置值
cat /proc/sys/net/netfilter/nf_conntrack_max
当前使用值
cat /proc/sys/net/netfilter/nf_conntrack_count
可以用命令看一下当前防火墙使用情况,就知道是不是防火墙丢包了

262144
18085

我这里 Grafana 的数据成直线了,数据不知道为什么停止了采集,我看看原因

那你确实不是防火墙导致的丢包,估计是其它原因,,目前看到完全正常了

现在连接数在 1.8k 的样子,服务正常,但是刚刚不知道为什么不正常,我试试重启一次 Sparkle 看看是不是刚刚启动的时候,有死连接之类的问题卡住

  • 重新启动

$ cat /proc/sys/net/netfilter/nf_conntrack_count
123596

我看到这个有点高

服务恢复后这个值在缓慢下降,现在我再重启一次,观察一下是不是会到 MAX,我怀疑刚刚半断网与此有关.

  • 重新启动

启用防火墙的话,这个上限一定要高,不然肯定会丢包的,以前被这个坑惨了,找了好几年才找到原因

启用防火墙的话,改成9999999是最合理的,不过你没用到上限值的话,倒是无所谓了

感觉并不是特别高,我看了一下整个启动过程,最多就一半,然后慢慢就下去了
我装个 node_explorer 看看 OS 情况

已经找到问题是虚拟线程的原因了,性能测试又可以圆满结束了

还没结束,现在还有个断网的问题。Sparkle 的压力一上来之后,路由似乎会出问题,但是我还不知道问题所在

这些是系统内核的问题了,和代码无关了吧,就这三种原因
1.打开文件数受到1024限制,引起无法建立网络连接
2.防火墙丢包,不过看来并不是
3.tcp丢包,默认限制4k

我现在尝试恢复一下我的状态面板,现在整个数据源全部离线了,原因不明,中间没改过东西

c75e84d1ea4d4e768ae8352aea5655f8

还真满了

以前踩过的坑了,,,帖子上特别有列举的内核优化

调了一下,再给个压力,然后我中间重启 Sparkle ,看看重启期间还会不会直接顶满

现在加到了 4194304,原来是 262144

我来了,你看看,现在是非高峰期,你可能要预留2到3倍这样,才能避免用满

爆了,临死之前监测到的 QPS 是 2.94k,然后监测就离线了
我看下堆栈转储
如果现在压力还在给,那我会说现在 web 控制台的流畅程度恢复了正常,感觉应该没有继续丢包。之前丢包的时候我连 arthas 都挂不上去。

我现在重启一次,看看会不会重启期间表满

看起来现在 netfilter 表状态不错,峰值 qps 2.75k

ksoftirqd 爆了,让我检查一下,这防火墙指定是关不得的

中断积攒的太多了,SSH 现在出现明显延迟
新连接建立似乎有点问题了

nf_conntrack_count 现在是 900903

现在给我的感觉不像是应用有问题,而是系统或者网络层出问题了,因为我看 Java App 现在跑的挺好的,就是一直套接字关闭。

这个改了吗?这个没改的话,流量大也会tcp丢包
防火墙那个是整个系统丢包,,这个的话是仅针对tcp

再压 15 分钟就可以停了,我这里的 node_exporter 已经跑起来了开始采集数据了

连接数已经不是问题了,检查过连接数正常(1.4k 的连接数)。但是包数量级不对,现在在检查网络栈。

看看能不能降低一半的流量,现在流量太高,采集数据采集不了(数据采集也是通过本地网络传输)。

好了,调度流量比例减少一半

现在不是仅仅是网络在丢包,本地回环也在丢(( 软中断数量疑似太多了