zoukankan      html  css  js  c++  java
  • 游戏服java程序启动,显示内存溢出

    1.OutOfMemoryError:Java heap space

    过程:服务器上面的mysql突然异常重启,导致了程序启动的时候报错
    问题1:OutOfMemoryError:Java heap space


    解决过程:
    1.查看mysql的错误日志
    根据错误日志,修复相关的表,修改相关的参数设置。
    修复表使用的是repair table命令。

    重启程序,依然报错:问题1.

    2.更改mysql的缓冲池大小
    由于服务器上面开了多个区服,可能导致的程序运行的时候,分配的内存不足。
    更改innodb-buffer-pool-size大小,根据实际情况更改。

    重启程序,依然报错:问题1.

    3.更改jvm运行时分配内存大小。
    通过更改jvm运行时初始设置参数来达到设置的目的。
    -Xms -Xmx -Xmn 等参数以及gc回收参数来设置。

    重启程序,依然报错:问题1.
    更改到2.5G的时候,程序正常启动,但是跑起来一段时间后down掉了。由于本机内存不足。

    4.更改数据库来测试。
    通过导出导入来建立两个新的测试库,使用过的是这个区服的数据和其他区服的数据。
    将游戏服挂载到本区服依然报错问题1.挂在到另外一个区服,则可以正常启动。
    预估判断数据库中表的问题。

    5.开发组使用程序在本机运行调试,发现是由于数据库中的两张大表,一直在无限循环查询,查询结果放入到jvm的内存中(由于两张表数据比较大),所以导致内存溢出。
    于是,就这个问题,展开了修复与调试。
    使用了之前备份的数据,来还原这两张表,结果依然运行不起来。报同样的错误。

    删除两张大表,程序可以正常启动。初步判断由于程序在查询这两张表的时候,由于数据太大,而且程序一直在循环的读入导致了内存的溢出。

    于是,就java程序在处理大数据方面做出调整和优化。

    通过设置游标来给java程序每次取出数据设限,结果程序可以正常启动。经过一天的测试,没有出现什么其他的异常。

    useCursorFetch=true&defaultFetchSize=1000
    通过上面这几个参数来给予java程序连接mysql数据库时的数据取出规则,来进行优化处理。

  • 相关阅读:
    【转】提高VR渲染速度的最好方法(经典转载)
    【转】提高VR渲染速度的关键
    【转】怎样提高VR渲染速度
    MySql学习05---数据类型
    MySql学习04----数据库表的基本操作
    MySql学习03----数据库基本操作
    MySql学习02----SQL编程的基本概念
    MySql学习01----数据库简介
    MySql学习路线00
    maven07-----maven中的聚合与继承
  • 原文地址:https://www.cnblogs.com/z-books/p/4427869.html
Copyright © 2011-2022 走看看