クライアント サーバーを使用してゲームを開発しています。このゲームのクライアントは、Flash Web、J2ME、または Android Mobile から取得できます。毎日 300 ~ 400 人のユーザーがこのゲームをプレイしています。私は頭痛の問題に直面しており、それを解決するために何日も費やしましたが、絶望的です ... サーバー Linux (8 コア プロセッサ) でこのアプリを実行すると、1 日後にこのアプリは CPU を約 100% 消費します (1 コアが使用されます) 100%)、2 日目には CPU を 300% 消費し、次の日には 500% を消費します... 約 4 ~ 5 日後、クラッシュしないようにこのアプリを再起動する必要があります。私のプロジェクトでは、各プレーヤーはスレッドを使用してデータを転送し (クライアントとサーバー間で)、DB を操作します。さらに、多くのスレッドを使用してプレーヤーのゲームのプレイを管理したり、情報をログに記録したりします。これらのスレッドは、必要に応じて 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 接続プールを使用してクライアントからの接続を管理する必要があると思いますが、問題が解決することを願っています...しかし、うまくいかない可能性があります...
それで、何か考えがあれば、私に提案してください、どうもありがとう!