阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

关于 Tomcat 线程池的理解

437次阅读
没有评论

共计 2006 个字符,预计需要花费 6 分钟才能阅读完成。

默认配置下,Tomcat 会为每个连接器创建一个绑定的线程池 (最大线程数 200)。在大多数情况下你不需要改这个配置(除非增大最大线程数以满足高负载需要)。但是 Tomcat 喜欢在每个工作者线程的 thread-local 上下文缓存一些诸如 PageContext 以及标签缓存的对象。正因如此,就会有你期望 Tomcat 能够将线程关掉以清理出来一些内存的情况。此外,每个连接器维护自己的线程池的话,根据服务器的承受能力来设置一个(线程数) 最高值会变得更加困难。解决这些问题的答案就是使用一个共享执行器。

通过让所有的连接器都使用同一个共享的执行器,你可以对预期的整个应用能够承载的最高并发请求数进行相关配置。执行器也让线程池具备了闲时收缩忙时扩展的功能。至少在理论上是这样的 …

org.apache.catalina.core.StandardThreadExecutor

Tomcat 默认所使用的标准、内置执行器就是 StandardThreadExecutor。配置文档访问:http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html。这些配置选项里有个取名不当的参数 “maxIdleTime”,以下是关于标准执行器和空闲线程的关闭你需要了解的一些事情。

标准执行器内在地使用了一个 java.util.concurrent.ThreadPoolExecutor。它通过具有一个变量大小的工作线程的线程池进行工作,一旦这些线程完成了一个任务,将会等待一个阻塞队列,直到一个新的任务进来。或者直到它等待了一个设定的时间,这时将会 “ 超时 ”,该线程将被关闭。这里边的关键点是第一个完成了一个任务的线程会首先被分配新的任务,线程池遵守一个先进先出 (FIFO) 的模式。在我们检查它将如何影响 Tomcat 执行器的时候我们需要时刻注意这一点。

maxIdleTime 实际上是 minIdleTime

由于 Java ThreadPoolExecutor 的 FIFO 行为,每个线程在可能被关闭之前会等待最少 “maxIdleTime” 时间来接受新的任务。此外,还是由于线程池的 FIFO 的行为,因为最先进入空闲状态的线程会被优先分配新任务,所以在它被关闭之前它最少也要等待 maxIdleTime  没有任何请求进入的时间。这个的影响是执行器实际上无法为线程池设置适合平均负载 (并发请求) 的大小,它会更加请求进入的速度来调配这个大小。这看起来好像没啥差别,但是对于 web 服务器来讲,影响可就大了。举个例子,同一时间进来了 40 个请求。线程池将扩展到 40 以适应该负载。之后的一段期间,同一时间只进入了一个请求。比方说每个请求的执行结束需要 500 ms,这就意味着在接下来的这段时间内,需要 20 秒才能把整个线程池里的线程执行一遍(记住,FIFO)。除非你把你的 maxIdleTime 设置到 20 秒以内,否则线程池将会一直持有 40 个线程,即使你的并发量从未超过 1。然而你也并不想把你的 maxIdleTime 设置的太小 – 这将导致你面临线程被关闭的太快的风险。

结论

为了匹配平均负载,而不是一个请求进入的比率的话,要得到一个可以预期的线程池行为,比较合适的是执行器应该基于一个后进先出 (LIFO) 的模式。如果线程池能够将最小等待空闲的线程来优先分配进入的任务的话,服务器就能够在较低负载阶段更好地关闭线程(以一个更加可以预测的方式)。在上面那个再简单不过的例子中,初始负载为 40 之后一段时间的负载维持在 1,一个 LIFO 的线程池就能够在 maxIdleTime 阶段之后将大小合理地调整到 1。当然,并非总是要求你使用这种策略,但是如果你的目标是把 Tomcat 所持有的资源最小化,很不幸的是标准的执行器可能就不是你所期望的那样了。

Linux 下 Apache 与多个 Tomcat 集群负载均衡 http://www.linuxidc.com/Linux/2012-01/51731.htm

Nginx Tomcat 集群负载均衡解决笔记 http://www.linuxidc.com/Linux/2013-07/86827.htm

实例详解 Tomcat 组件安装 +Nginx 反向代理 Tomcat+Apache 使用 mod_jk 和 mod_proxy 反向代理和负载均衡 http://www.linuxidc.com/Linux/2013-06/85290.htm

CentOS 6.5 下利用 Rsyslog+LogAnalyzer+MySQL 部署日志服务器 http://www.linuxidc.com/Linux/2014-06/103836.htm

Apache+Tomcat 环境搭建(JK 部署过程)http://www.linuxidc.com/Linux/2012-11/74474.htm

Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2006字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7964538
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...