• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
maikkk
博客园    首页    新随笔    联系   管理    订阅  订阅
java游戏服务器优化

最近游戏服务器经常是启动一段时间后gc 很频繁,造成无法登陆游戏,原因无非就是临时内存增长速度很快,那么就是要分析内存飞涨原因

先在本地启动游戏服务器,java 环境用Jdk1.8 先用jps 查出java 进程,然后执行 jmap -dump:live,format=b,file=<file_name>.hprof  <pid>

得到游戏服务器内存dump 文件大概1.5G,用eclipse 打开该hprof文件分析后得到下面 有关类的统计数据(eclipse要安装 memory analyzer)

 

可以看到排名第一那个类占用95%,这个类似保存了服务器各种数据,

因为服务器设计时候用了数组保存了地图信息,同时有各种城堡,可以看到一个城堡类占用2256字节大小,我认为可以优化它

可以去除HashMap,lock 类,减少静态内存占用 5个锁变量5*48 = 240 字节,4个HashMap变量本身占用4*48 = 192 字节 

而HashMap存储一个Node需要32字节,引用的数据大小要48个字节,花费的内存代价很大的,下面需要看看原先代码设计

原先代码设计思路,是用军队类型=>军队数量,思路还是不变,但是需要换固定数组保存就行,因为军队类型数量是固定的

至于lock 我就改成用

优化后数据统计分析

可以看到npccastle 的内存大小至少减少一半,lock 用synchronized 替换

 基于以上优化思路

可以看到内存dump文件从1.5G左右 减少到700多M

暂时把静态内存优化写到这里,后面还有动态的一部分再找时间记录下来

 

posted on 2018-03-18 11:30  maikkk  阅读(376)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3