我開發了一個基於Netty的TCP服務器,以接收基於GSM/GPRS的設備的維護連接並將這些數據保存在MySql數據庫中。目前處理5K連接。設備以30-60秒的間隔發送週期性消息,但連接保持活動狀態以保持雙工通信。爲什麼我的基於Netty的TCP服務器掛起100%的CPU使用率?
服務器應用程序在正常運行時消耗1-2%CPU,峯值高達10%,平均負載非常低。但是,正常運行6小時至48小時後,服務器應用程序會以恆定的100%CPU消耗掛起,線程轉儲表明epoll選擇器是CPU使用率高的原因。應用程序仍然保持連接幾個小時,然後CPU消耗增加到200%,大多數連接被釋放。
在項目開始時,我們使用MINA,並且與1K活動連接有相同的問題,這就是爲什麼我們切換到Netty。直到5K連接Netty更加穩定,掛斷期爲1-2周。
我們的服務器配置:
- I7-2600四核CPU,
- 8 GB拉姆,Centos的5.0,
- 打開JDK 6.0,
- 的Netty 3.2.4(Netty的是幾小時前更新至3.5.2)
爲了解決這個問題,我們將更新JDK
到7.0(JDK
有一個針對異步操作進行了優化的新I/O實現),並嘗試包括FreeBSD,Windows Server在內的不同操作系統,因爲每個操作系統都有不同的處理I/O的策略。
任何幫助將不勝感激,謝謝..
我覺得沒有代碼的副本沒有人能夠查明錯誤。 – 2012-07-08 11:58:23
我會嘗試先升級java版本。使用nio時,它的重要性在於擁有最新的java版本。不知道你使用的是什麼版本的openjdk 6. – 2012-07-08 15:48:35
感謝諾曼,我使用OpenJDK「1.6.0_20」,我將更新OpenJDK並分享我的經驗。 – nevzat 2012-07-09 08:02:43