TThreadedSelectorServer介绍及Direct Memory OOM分析
一、TThreadedSelectorServer线程模型: 该服务会启动1个AcceptThread, 2个SelectorThread(默认为2个,可设置),一个woker线程池(池的大小可设置), 一个AcceptThread执行accept操作,将accept到的Transport交给SelectorThread线程, AcceptThread中有个balance均衡器分配到SelectorThread; SelectorThread执行read,write操作,read到一个 FrameBuffer (封装了方法名,参数,参数类型等数据,和读取写入,调用方法的操作)交给WorkerProcess线程池执行方法调用。 二、SelectorThread中FrameBuffer读取的过程 每个SelectorThread线程 使用 FrameBuffer 来读取数据。 org.apache.thrift.server.AbstractNonblockingServer.FrameBuffer: private boolean internalRead() { try { if (trans_.read(buffer_) < 0) { return false; } return true; } catch (IOException e) { LOGGER.warn("Got