这个问题是以前测试上万个链接的pingpong发现的,调了好久,但当时急着作其余事,就没有详细记录下来,如今回想起来也有点记不清具体哪儿了。服务器
表现是在测试上万个链接的pingpong时会出现服务器挂起的现象,服务端没法收到任何消息,因为服务器用了OrderedThreadPoolExecutor,debug时发现OrderedThreadPoolExecutor的idleWorkers显示有15个空闲线程,但workers里一个Worker线程都没有,因此NioProcessor提交的任务都没法继续,服务器整个被挂起……多线程
后排排查发现mina的encoder最后手动调用了out.flush();,加了这行会在收发负载量大时由于mina的OrderedThreadPoolExecutor多线程模型致使内部抛异常、状态异常。。。测试
在此记下这个坑
线程