线程数调优
本页将分享我在 Folia 线程数设置方面的经验。
总览
我建议调整以下 3 处线程数配置,分别是:
- threaded-regions(config/paper-global.yml)
- chunk-system(config/paper-global.yml)
- netty-threads(spigot.yml)
根据我的经验,建议将可用线程数的 80% 的一半分配给 tickregion(因为 tickregion 通常具有较高优先级),剩余部分的一半分配给 chunk-system,其余留给插件和 netty-threads。
此外,如果您已对整个世界进行了预生成,chunk-system 的分配可以减少约 30~50%。
另外,由于大多数情况下服务器世界并未预生成,仍建议为 chunk-system 保持较高的次要优先级,以在玩家传送和加入时保证流畅体验。
Netty 线程通常占用不多,保持默认值即可。如果您使用的插件需要频繁且大量地修改数据包,建议将其提高约 50%(例如 4 → 6)。
以上内容来自我朋友服务器的实际经验,可能并不完全适用于所有环境。
Chunk 系统
此配置项下有 2 个子项:worker 线程和 IO 线程。
一般情况下,可参考官方文档(每 200~300 名玩家约分配 3 个 IO 线程)来配置 IO 线程数,剩余线程分配给 worker 线程。
此外,如果您使用的分支支持 linear 或 bufferedlinear 格式,建议将 IO 线程数提高约 1/3,因为这些格式可能会在 IO 线程上执行较重的压缩操作,导致存档写入滞后。
Netty 线程
Netty 线程负责管理服务器的 socket IO,处理每个数据包的解码/编码,并接受传入连接。
默认情况下无需修改此设置(在我朋友的服务器上,110 名玩家时 4 个线程的占用约为 28%)。如果服务器同时在线人数超过 300,建议提高约 50%(通常保持 15% 的空闲余量即可)。