@Joakim Erdfelt,非常感谢您的回复!
我的服务器存在于图表微服务中,而不是 Web 服务器,连接数无法达到 30,000,可能是 Google ^.^。
我只想让任务序列在图表中退出网络服务器,因为如果不是任务序列,我会收到来自合作伙伴服务器的响应 TIMEOUT。
响应时间大约为 10 秒,因此在最小线程中没有线程忙。
我一直在使用:
<jetty.version>9.4.30.v20200611</jetty.version>
我认为上面的图表是码头的核心,因为我仍然发现它允许这样做,但是我有配置我的服务器的解决方案高级图表:
boolean checkOOM = threadPool.getThreadPoolBudget().check(StaticConfig.JETTY_MAX_THREADS);
LOGGER.info("check maxThread allow with memory : "+checkOOM);
if(!checkOOM) {
LOGGER.info("please increase merory server or decrease maxThread.");
System.exit(1);
}
//depend info system
//get core processor of server
int coreProcessor = Runtime.getRuntime().availableProcessors();
LOGGER.info("coreProcessor : "+coreProcessor);
Server server = new Server(threadPool);
int port = 0;
try {
port = Integer.parseInt(System.getProperty("server.port"));
} catch (NumberFormatException ex) {
LOGGER.error("Property server.port not found. " + ex.getMessage(), ex);
System.exit(1);
}
// if acceptor 0 then the selector threads are used to accept connections
// selector backup for acceptor
// only init with limit system
try (ServerConnector httpConnector = new ServerConnector(server, coreProcessor, coreProcessor)) {
httpConnector.setAcceptQueueSize(StaticConfig.JETTY_MAX_QUEUED);
LOGGER.info("acceptors : "+httpConnector.getAcceptors());
LOGGER.info("queueSize : "+httpConnector.getAcceptQueueSize());
httpConnector.setPort(port);
server.setConnectors(new Connector[]{httpConnector});
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
System.exit(1);
}
server.start();
server.join(); << init thread pool.
上面的代码初始化配置允许服务器运行,我将为接受器备份 coreProcessor 编号接受器和 coreProcessor 编号选择器。
我使用的 ServerConnector 与您的建议类似。
我尝试使用默认的 QueueThreadPool(初始化构造函数服务器未在上面的代码中输入参数 threadPool),我将日志打印为 4 个线程 init:
int cntThread = server.getThreadPool().getThreads();
LOGGER.info("idleThread server : "+cntThread);
我只是想知道图中线程池的作用是否正确!
ps:你有最新的jetty当前版本图吗?
非常感谢。