我在一台高配 Linux 开了 Minecraft 群组服, 在地图和玩家达到一定数量时, 会触发 open file 限制, 具体表现为服务端日志error: too many open files. 随之而来的就是大量地图文件无法读取, session.lock文件失效, 在游戏内的表现就是大量区块变成空置域, 玩家背包物品丢失.

具体的服务器启动关系是: 宝塔 -> Nodejs -> MCSM -> Java.

在发现问题的时候尝试了各种百度 / CSDN 的姿势, 均无果:

Linux 下 Too many open files 问题排查与解决

linux open file 最大,怎样增大 Linux 系统的 open file(s) 上限

Linux - 修改系统的max open files、max user processes (附ulimit的使用方法)

刨根问底,看我如何处理 Too many open files 错误

在尝试上述姿势后cat /proc/’程序pid’/limits显示仍然为2048.

经过两天的深入:

实战:linux修改open files-2022.1.15

Linux 系统修改 open files 无效

这两篇文章中的修改/etc/systemd/system.conf解决了我的问题.

具体原因是 Nodejs 服务是由 systemctl 启动的, 受到/etc/systemd/system.conf限制的, 修改/etc/security/limits.conf对于服务是无效的.

后记

Docker 启动报错 status=205!LIMITS