Skip to content
This repository was archived by the owner on Feb 9, 2026. It is now read-only.

开放数据库连接池部分可能影响可用率的选项#221

Open
Ylkawa wants to merge 1 commit into
CaaMoe:v6from
Ylkawa:v6
Open

开放数据库连接池部分可能影响可用率的选项#221
Ylkawa wants to merge 1 commit into
CaaMoe:v6from
Ylkawa:v6

Conversation

@Ylkawa

@Ylkawa Ylkawa commented Feb 6, 2026

Copy link
Copy Markdown

Multilogin使用MySQL数据库时,会使用HikariCP管理连接,而HikariCP的默认参数并不适应所有网络环境。
例如在NAT或者其他防火墙严格的网络环境中,MySQL的TCP长连接撑不到HikariCP的默认30分钟生命周期,两分钟进行一次的保活也没能凑效。我进行过测试了,断联与Multilogin或HikariCP无关,就简单做一个长连接,10分钟才维护一次,在严格的NAT环境,20分钟的时候再检查就已经断了。
具体表现为,Velocity闲置一段时间之后,玩家登录服务器,客户端会卡在“通讯加密中”,服务端的连接池会连续报错数据库连接失效,直到连接超时。
从开发的角度讲,触发的逻辑大概是这样:

  1. Multilogin开启,HikariCP以默认参数创建20条连接
  2. Velocity闲置,HikariCP的连接在不知情的情况下先被NAT或防火墙掐了,但是HikariCP没有及时处理
  3. 玩家登录,Multilogin处理时从HikariCP取出连接使用,抽出几个连接依次判定超时(5秒钟),几次尝试之后,客户端超时断开
image

不同网络环境的差异过于黑箱,但在我的测试中,能确认修改HikariCP的参数,对连接池的可用率是有立竿见影的改善的。
另外据我所了解,仍有相当量服务器工作在NAT环境下(高防机房非独立IP,或者家里云),且额外在localhost部署一个MySQL实例既没必要也不好管理。
所以我做了这个修改,把连接池的keepaliveTime maxLifetime validationTimeout这几个设定开放出来了,这对解决远程MySQL连接问题会有改善,默认值遵循了原本的设定

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant