4
回答
Tomcat 的 Executor 配置项 maxIdleTime 的问题

我怎么感觉 maxIdleTime 这个配置没用呢? 官方文档对这个配置项的解释是当线程空闲时间超过指定时间就会关闭,默认时间是1分钟。

可是我却从来没发现 OSChina 启动的那么多 Tomcat 线程又被回收过,特别是凌晨很空闲的时候也是如此。

用的是 Tomcat 7.0.32

举报
红薯
发帖于5年前 4回/1K+阅
共有4个答案 最后回答: 5年前

翻了osc上面tomcat的源码,发现Tomcat在底层用的是 java.util.concurrent 包,StandardThreadExecutor里面有个TaskQueue extends LinkedBlockingQueue的变量,它的初始容量是Int最大值...提供了对外的setget方法,不知道tomcat配置中会不会更改,要是有时间再去下载源码编译看看才知道,如果没改,那意味着maxIdleTime的设置无效。。。

本来昨晚11点想回复的,结果,亲,现在都几点了,早点洗洗睡吧 :) 

我了tomcat的源码,maxIdleTime是jdk的threadpoolexecutor的keepalivetime,keepalivetime是指当前线程总数超过corePoolSize,会将空闲时间超过maxIdleTIme的thread杀死知道线程总数为corePoolSize。你没看到线程回收,应该是线程总数没有达到corePoolSize。只有线程数达到corePoolSize,并且taskQueue队列满了才会添加worker线程。
顶部