服务器刚启动时一切正常,玩家能进能出,打怪升级也没问题,但运行几个小时(如你所说的5小时)后,突然无法创建新人物,甚至老玩家下线后再上线也提示失败。这种现象通常不是文件损坏,而是资源耗尽或逻辑死锁。这就像一家餐厅刚开业时井井有条,但随着客流增加,收银台排长队,最后导致系统瘫痪。核心原因往往集中在数据库连接池堵塞、内存溢出或脚本死循环上。
数据库连接池耗尽与死锁
这是最常见的原因。传奇服务端在玩家登录、创建人物、保存数据时,都需要向数据库(SQL Server或MySQL)申请一个“连接句柄”。
如果你的服务端配置中,数据库连接池的大小设置过小(例如默认只有10个或20个),随着玩家数量增加,或者某些脚本(如自动回收、排行榜更新)频繁请求数据库且不释放连接,连接池很快就会被占满。一旦占满,新的创建人物请求就会在队列中无限等待,直到超时,表现为“转圈”后提示失败。
检查M2Server或引擎配置器中的“数据库设置”,找到“最大连接数”或“连接池大小”。尝试将该数值调大(例如从50调至200或500)。同时,检查是否有第三方插件在后台高频读写数据库,必要时关闭非核心插件以释放资源。
内存溢出与句柄泄漏
长时间运行后,服务端程序(M2Server.exe)占用的内存会持续上升。如果引擎版本较老或存在代码缺陷,可能会出现“内存泄漏”。
当物理内存被耗尽,系统开始使用虚拟内存(硬盘读写)时,处理速度会呈断崖式下跌,导致无法响应新的创建请求。
打开任务管理器,观察M2Server的内存占用。如果运行几小时后占用了几GB甚至更多,说明存在泄漏。除了重启服务器释放内存外,可以尝试在引擎配置中开启“自动重启”或“定时重启”功能,例如每天凌晨自动重启一次,以释放累积的垃圾数据。
脚本死循环与后台线程阻塞
很多版本包含复杂的后台脚本,如“全服泡点”、“怪物攻城”、“自动活动”。如果某个脚本编写不当,陷入死循环(例如While循环没有退出条件),或者定时器频率过高(如0.1秒执行一次),随着时间推移,CPU占用率会被拉满。
当CPU处于100%满载状态时,服务端无法处理新的登录封包,导致创建人物失败。
检查Robot_def目录下的机器人脚本,特别是那些带有定时器(#Timer)的脚本。查看是否有脚本在疯狂刷屏日志或重复执行无意义的操作。尝试暂时关闭所有后台定时脚本,观察服务器是否能恢复正常。
磁盘空间与日志文件爆满
这是一个容易被忽视的物理原因。服务端在运行过程中会不断生成日志文件(Log),包括登录日志、交易日志、错误日志等。
如果你的服务端放在C盘或空间较小的分区,且没有设置日志自动清理,几个小时后日志文件可能膨胀到几GB甚至几十GB,占满磁盘空间。一旦磁盘满了,数据库无法写入数据,人物创建自然会失败。
检查服务端所在的硬盘分区,看剩余空间是否充足。进入MirServerLog或Mud2Logsrv目录,查看是否有巨大的文本文件。建议设置日志定期清理,或删除旧的日志文件释放空间。
防攻击插件与IP限制误判
部分引擎或插件带有防攻击、防挂机功能。如果服务器受到局域网内的扫描,或者短时间内有大量异常连接请求(可能是某个玩家的脚本卡了,疯狂重连),防火墙插件可能会误判为遭受攻击,从而触发“自动封禁IP”或“暂停服务”机制。
检查M2Server控制台是否有“检测到攻击”、“IP已被封禁”的提示。查看插件配置(如IPLocal.dll),适当放宽限制,或将被误封的本地IP(127.0.0.1或局域网IP)加入白名单。

