游戏App Client-Server:MySQL记录“连接太多”,Linux记录“100%CPU”

时间:2012-10-21 16:19:14

标签: java mysql linux jdbc client-server

我正在开发一款带有客户端服务器的游戏,这款游戏的客户端可以来自Flash Web,J2ME或Android Mobile。每天有300-400名用户玩这个游戏。我遇到了头疼的问题,我花了很多时间来解决它,但是无望......当我在服务器Linux(8核处理器)上运行这个应用程序时:一天后这个应用程序消耗CPU大约100%(使用一个核心) 100%),第二天消耗CPU 300%,第二天500%......大约4-5天,我必须重新启动这个应用程序,以防止它崩溃。在我的项目中,每个玩家使用线程传输数据(在客户端和服务器之间)并使用DB进行操作,除此之外,我还使用许多线程来管理玩家的游戏或日志信息,这些线程还在必要时使用DataBase进行操作。每当玩家或线程想要获取某些信息或将某些内容保存到DataBase中时,我为每个查询创建一个连接并在完成查询后关闭此连接,它看起来像这样:

getSomething(int id) {
    ...
    String sql = "SELECT * FROM mail WHERE id = ?";
    connection = ConnectionManager.getDbConnection();
    pstmt = connection.prepareStatement(sql);
    ....
    while (rs.next()) {
    ...
    }
    connection.close();
}

这意味着如果400个用户同时登录或保存某些内容,将创建400个连接以获取或保存每个用户的数据,并且在完成查询后将释放400个连接。我不确定这个策略是好的......或者它可能是我问题的原因...

在我的日志中,有时会出现“连接太多......”的日志,这让我怀疑在我的应用程序中关闭连接,这会导致CPU消耗超过100%,更多连接未释放,CPU消耗更多...

现在我认为我应该使用JDBC连接池来管理来自客户端的连接,并希望它可以解决我的问题...但我不确定,它可能不起作用...

所以,如果您有任何想法,请向我建议,非常感谢您!

0 个答案:

没有答案