应用运行 25天,中间未有停服。
2012-08-06 11:33 -2012-08-31 08:04
2012-09-04 11:50 -2012-09-29 08:22
2012-10-08 14:42 - 2012-11-02 11:13
两次服务器运行的时间,基本一致都24天20小时30分,诡异
2012.8.31 8:05分 后台持久化玩家数据的两个 island 线程几乎停止运行
.... ... 2012-08-31 08:04:54,350 INFO :(save to db) com.ztgame.rabbit.server.island.service.role.RoleManager - 持久化玩家数据: id=536524 2012-08-31 08:05:00,371 INFO :(save to db) com.ztgame.rabbit.server.island.service.role.RoleManager - 持久化玩家数据: id=321180 2012-08-31 08:05:02,350 INFO :(save to db) com.ztgame.rabbit.server.island.service.role.RoleManager - 持久化玩家数据: id=242780 2012-08-31 08:05:05,359 INFO :(save to db) com.ztgame.rabbit.server.island.service.role.RoleManager - 持久化玩家数据: id=500930目前怀疑和LinkedBlockingQueue有关 http://blog.csdn.net/taige5555/article/details/2984251
2012.09.03 10:15分 内存溢出 导致很多java线程被系统杀死
cat /var/log/messages |grep -i "killed process" ......... Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 31065 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 31079 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 8446 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 15978 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 30294 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 30295 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 20301 (java). Sep 3 10:24:15 VM_235_195 kernel: Out of memory: Killed process 26760 (java).
怀疑两个island的JVM外内存占满系统内存(9G)导致的,进而怀疑是snappy 压缩解压缩一块存在问题,因为有上次gate 上ZLIB出内存泄漏问题的参考。
环境:java version "1.6.0_33"
最终查出原因为如下的代码导致:
public class GameTimeAxis {
public long now(){
return baseGameTime +(int)(System.currentTimeMills()-baseGameTime)*mutiplyingFactor;
}
}
当毫秒数达到24天20小时30分时就会达到int的最大值,以至于超出的话就变成负值,永远小于上次保存的时间了
解决方法,干掉这个类!