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

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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值