JAVA游戏服务器关闭操作的监听

来源:互联网 发布:自学php找工作 编辑:程序博客网 时间:2024/05/22 17:38

JAVA游戏服务器关闭操作的监听

    今天上午刚到公司,运营的同学跑过给我说“你快看下我们昨天推的活动消失了”,运维的同学跑过来给我说“咱们的几个游戏服务器今天凌晨4点因为内存占用超过设定的4G被自动kill掉了,我运行start.py脚本启动服务器之后,又运行stop.py停服,但是好像数据出了问题,你快看一看”。    一脸蒙蔽:-(然后就检查服务器的启动、停止代码,查看是否有多线程问题,最后排除了多线程问题。运维的同学的实际操作步骤是:- 1.执行start.py脚本启动服务器- 2.若干时间后,执行stop.p脚本y关闭服务器    但是运维同学在1并未完全执行成功(也就是各个线程、数据都还没有完全初始化)就开始执行stop.py;    本来按理说,这样操作也是没问题的,但是万万想不到,监听服务器stop的addShutdownHook();    是在写在主线程调用GameServer.start()的第一行,也就是说服务器一启动就开始监听关闭的消息;    但是这样会有一个问题,在启动服务器的过程中执行start.py(此时数据可能还没初始化好),    可能会导致回存一部分空的数据到数据库中(在服务器执行stop之前会执行一系列的回存操作),    因为此时内存中并没有数据,但是却把原本的数据给覆盖掉了.为了避免在启动服务器的过程中执行stop.py导致数据出错,    所以将addShutdownHook()放在了线程、数据初始化之后,暂时修复了这个隐藏的bug。