Sparkle Public Tracker 欢迎各位尝试测试

看来和设计1000比较相符,,,那我停了

好像还真是带宽爆了,我看 CPU Profiler 的结果都堵在网络 IO 上了

流量算法切换到bbr看看?

BBR 不是万能的

不过在有一定时延和丢包的情况下较其他算法还是有优势的

可以再试一次,根据建议我改了一下最大允许的连接数,然后撤掉了异步队列(这可能是个正向优化,也可能是个负向优化)。

我刚刚测了一下服务器的带宽,它实际上有 3Gbps 的带宽,大概是瓶颈不了(至少到测速服务器不会),但是到你的服务器带宽可能是有限的。

除此之外,开了压缩支持。

另外:本次使用 Valkey 而不是 Garnet,看看 Valkey 的并发能力

好了,你观察看看,我总感觉瓶颈是docker。。。

稍等,我有个参数没调,我调一下解除限制

发现 service.tracker.max-parallel-announce-service-requests 的参数被限制在了一个较低的水平,现在重启一下解除这个限制

  • 00:48 新参数上线
  • 00:48 忘记更新版本了……更新一下 更新到 4cf51e7

是的爆了,但是不知道哪里出的问题,我 dump 一下线程

Redis 线程 CPU 压力满了

现在换回 Garnet 看看

  • 重启更换 Garnet
  • 停止使用虚拟线程,换到 OS 线程看看

现在应该部分恢复了,还在看效果,响应速度现在恢复了(好像直接不调度了?现在 QPS 只有来自 newtracker 的 300 左右的 qps)


感觉已经爆了。。。


我降低了一些流量调度,目前依旧是爆的


我又改回去了,我看看还会不会爆


目前看起来很有效果,运行很正常了,你看看占用多少?

视乎你做了这个后,就恢复正常了

QPS: 1.71k
CPU: ~49%
Heap RAM: < 3GB (in use)

目前 Garnet 和 Sparkle 的 CPU 使用率一半一半的样子

我怀疑是 CarrierThreads 频繁的上下文切换导致产生性能损失了

其实中间我做了不止这一件事情

  • 一个是禁用了虚拟线程,我怀疑承载虚拟线程的平台线程数量不足,而且频繁上下文产生了性能损耗
  • server.tomcat.threads.max 加到了 500 个 OS 线程
  • server.tomcat.accept-count 加了三倍到 300
  • server.tomcat.max-connections 还是保持默认 8192

没问题了,,,虽然不知道你指的这个虚拟线程到OS线程具体指的是什么,但是现在已经运行正常了

虚拟线程其实就是其他语言里的 “协程”,指在一个平台线程上分时运行多个虚拟的线程,因为平台线程由操作系统管理,开太多了系统吃不消

平台线程就是 OS 线程,也就是实打实的操作系统上面开一个新的线程

我现在怀疑是承载虚拟线程的 CarrierThreads 线程数少的太保守了,导致性能上不来?

改回虚拟线程?

  • 改成虚拟线程
  • 观察结果 爆了

你改回去试试?我调度还没停


对,改回去虚拟线程看看还会不会爆

那果然就是这个虚拟线程的原因了

我可以试试看增加下虚拟线程对应的平台线程数量

之前有建议过比特彗星引入boost fcontext协程,减少上下文切换,,然而官方没回我
使用fcontext应该能提高性能

并不总是绝对的,要看场景,协程比较适合 I/O 重或者中间有阻塞代码的。

我刚刚加了一下 jdk.virtualThreadScheduler.parallelism 到 128,让我检查一下生没生效

笑死,生效了,但是除了 CPU 占用变高了以外,没看到服务变好

我现在加到和原来的平台线程一样的 500 看看,没啥卵用

  • 切换回平台线程

现在是平台线程,但不知道为什么还是卡住,好了,又卡住了,我启个 profiler 看看

看来这个虚拟线程很烂的样子,所以以后要避开这个,都用os线程


切换回去居然又卡住了吗,怪,我这里提示503

服务器这里出现了奇怪的网络问题,我感觉好像网络中断了,但我 web 控制台还连着
重启一下容器看看,各种意义上的十分诡异