私は Netty ベースの TCP サーバーを開発して、GSM/GPRS ベースのデバイスとの接続を維持し、それらのデータを MySql データベースに保持します。現在、5K 接続が処理されています。デバイスは 30 ~ 60 秒の間隔で定期的にメッセージを送信しますが、二重通信を維持するために接続は維持されます。
サーバー アプリケーションは、通常の操作で 1 ~ 2% の CPU を消費し、最大 10% のピークがあり、平均負荷は非常に低いです。ただし、6 時間から 48 時間の通常の操作の後、サーバー アプリケーションは一定の 100% の CPU 消費でハングアップし、スレッド ダンプは epoll セレクターが CPU 使用率が高い理由であることを示します。アプリケーションはまだ数時間接続を維持し、その後 CPU 消費が 200% に増加し、ほとんどの接続が解放されます。
プロジェクトの開始時に MINA を使用しましたが、1K のアクティブな接続で同じ問題が発生したため、Netty に切り替えました。5,000 接続まで、Netty ははるかに安定しており、ハングアップ期間は 1 ~ 2 週間でした。
私たちのサーバー構成:
- I7-2600 クアッドコア CPU、
- 8 GB RAM、Centos 5.0、
- JDK 6.0 を開きます。
- Netty 3.2.4 (Netty は数時間前に 3.5.2 に更新されました)
この問題を克服するためにJDK
、7.0 に更新し (JDK
非同期操作用に最適化された新しい I/O 実装を備えています)、FreeBSD、Windows Server などのさまざまな OS を試します。これは、オペレーティング システムごとに I/O の処理方法が異なるためです。
どんな助けでも感謝します、ありがとう..