最近,使用TThreadPoolServer遇到一个问题,就是线程池线程的数量少于发送端的数量引起的问题。
外部表现有2个:
1)某些客户端无论如何都连接不上服务端。
2)服务端打开socket越来越多,直至65536,最终无法接收数据,甚至程序崩溃。
这算不算TThreadPoolServer bug?还是我用的不对?它应该拒绝多出来的请求,并关闭socket。
错误信息:
Thrift: Mon May 6 17:15:21 2013 TThreadPoolServer: TServerTransport died on accept: accept(): Too many open files
Thrift: Mon May 6 17:15:21 2013 TServerSocket::acceptImpl() ::accept() Too many open files
可用ll /proc/pid/fd查看该进程打开的句柄
解决方法:1)将线程池数量提高至足够大,不可避免还存在同样问题,不推荐;2)使用TThreadedServer,有多少请求,建立多少(长)连接。