這個問題是之前測試上萬個連接的pingpong發現的,調了很久,但當時急着做其他事,就沒有詳細記錄下來,現在回想起來也有點記不清具體哪兒了。
表現是在測試上萬個連接的pingpong時會出現服務器掛起的現象,服務端無法收到任何消息,由於服務器用了OrderedThreadPoolExecutor,debug時發現OrderedThreadPoolExecutor的idleWorkers顯示有15個空閑線程,但workers里一個Worker線程都沒有,所以NioProcessor提交的任務都無法繼續,服務器整個被掛起……
后排排查發現mina的encoder最后手動調用了out.flush();,加了這行會在收發負載量大時因為mina的OrderedThreadPoolExecutor多線程模型導致內部拋異常、狀態異常。。。
在此記下這個坑
