http://www.open-open.com/doc/view/cd7da54b013c43d4b848c872e039f418 --- 一篇很详细的介绍文档
在服务器端,如果仅仅用之前的代码,那么肯定是不行的,参数优化是必须的。
参数优化包含以下几个部分:
Accept线程: 线程个数
Select Worker线程: 线程个数 每个线程的acceptedQueue有界还是无界
ExecutorService invoker的线程个数
===============================具体代码如下:
Accept线程: 线程个数,默认就是1个。
tArgs.selectorThreads(Runtime.getRuntime().availableProcessors()*1); //这里应该写为,目的是为了修改Select Worker线程数。
tArgs.acceptQueueSizePerThread(10000); //设置每个线程的acceptedQueue.其实就是单线程待处理的IO连接数的最大等待个数。
tArgs.workerThreads(Runtime.getRuntime().availableProcessors()*10);
===
关于注册钩子
serverTransport = new TServerSocket(port);
TProtocolFactory proFactory = new TBinaryProtocol.Factory(); TProcessor processor = new GraphService.Processor(new GraphServiceImpl());Args arg=new Args(serverTransport){}.protocolFactory(proFactory).processor(processor);server = new TThreadPoolServer(arg);log.info("Start server on port "+port+"..."); registerShutdownHook(server);server.serve();其中registerShutdownHook是用来在jvm进程结束之前关闭server的,Ctrl-C和kill -15关闭程序会执行,kill -9不会执行