2

我正在开发一个带有客户端-服务器的游戏,这个游戏的客户端可以来自 Flash Web、J2ME 或 Android Mobile。每天有 300-400 名用户玩这个游戏。我面临头痛的问题,我花了很多天来解决它,但没有希望......当我在服务器 Linux(8 核处理器)上运行这个应用程序时:一天后这个应用程序消耗 CPU 大约 100%(使用一个核心100%),第二天它消耗CPU 300%,第二天500%......大约4-5天,我必须重新启动这个应用程序以防止它崩溃。在我的项目中,每个玩家我使用一个线程来传输数据(在客户端和服务器之间)并使用数据库进行操作,除此之外,我还使用许多线程来管理玩家的游戏或日志信息,这些线程在必要时还使用数据库进行操作. 每当玩家或线程想要获取一些信息或将一些东西保存到数据库中时,

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 连接池来管理来自客户端的连接,并希望它可以解决我的问题......但我不确定,它不能工作......

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

4

0 回答 0