最近在和好朋友一起玩服务器,晚上结束工程后退出游戏,第二天无论怎么进去后都会卡死,接着连接超时,服务器日志一直警告:
[10:03:01] [Server thread/INFO]: Command execution stopped due to limit (executed 65536 commands)
[10:03:01] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2696ms or 53 ticks behind
在更换另一台机子后更是直接关服(配置更低点):
[10:21:16] [Server thread/INFO]: Command execution stopped due to limit (executed 65536 commands)
[10:21:16] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 3294ms or 58 ticks behind
[10:22:17] [Server Watchdog/ERROR]: A single server tick took 60.00 seconds (should be max 0.05)
[10:22:17] [Server Watchdog/ERROR]: Considering it to be crashed, server will forcibly shutdown.
[10:22:17] [Server Watchdog/ERROR]: This crash report has been saved to: E:\mcserver\.\crash-reports\crash-2024-06-15_10.22.17-server.txt
于是找度娘问了一圈,没找到相关案例,又问了下人工智障,“换服务端、排查模组、换高配......”以上所有结果中让我注意的是服务器性能,因为我的两台机子CPU主频比较低,只有两点几G,而通过任务管理器发现,MC服务端在处理一些任务时是单线程的,比如玩家加入时,这就导致低频CPU对这些任务的处理能力比较差,进而使服务器进程卡顿,这也解释了为什么有玩家加入时会卡一下下。
那么怎么解决呢?以俺寻思之力,"A single server tick took 60.00 seconds (should be max 0.05)"一个tick花费了60秒,判定服务器崩溃执行关服,那把max-tick-time改大点不就行了,给服务器充足时间去处理任务,于是打开server.properties,改到300秒:
max-tick-time=300000 //这里的单位是毫秒
之后启动服务器,加入,还是卡住,一开始我是有点慌的,但这次可以正常加载区块,并且可以操作,只不过一直卡在一帧的状态,过了一分多钟就流畅了,排查后发现是刷线机忘记关了,刷满了两大箱子后溢出,因为我有清掉落物的习惯,所以一开始溢出没什么影响,但我退出比较早,我的好朋友奋战了约一小时后才退出,这段时间里掉落物便一直堆积,有人在旁边时由于已经加载完毕所以不会卡顿,当下次进入时服务器便处理不过来了,于是出现了隔夜就玩不了的情况。
后话:起初我排查了模组,虽然不太可能,事实上也确实如此。之后把存档导入本地游戏打开,由于没有玩家信息所以出生在比较远的地方,在开始加载家范围的区块时出现严重的卡顿,当时却没注意到是刷线机的问题,事后就摸不着头脑了,进服务器卡死,本地打开却可以。
所以大家一定要注意一些机器不要忘记关,或者做个溢出清理的装置(多的直接丢火里或岩浆,我们的熔炉组刷燃料机就有),生电服尤其注意。