创建 Tomcat 线程池以获得更好的吞吐量

我们在生产中的前端 java tomcat 应用程序中遇到了一个问题。此应用程序接收来自管理 ui rest 调用以及调用这些 rest 端点的其他外部客户的流量。

问题

有两种请求,即基于 GET 的调用和 POST 调用。问题在于,基于非关键 GET 的调用需要更长的时间,从而阻塞服务器并导致应用程序超时。因此,我们现在想要一种基于 URL 和请求方法来分离事务并分离执行的方法,以便慢速事务的延迟不会影响关键事务。

Image description

解决方案

我们决定首先识别并分离 nginx 中的关键事务。然后我们在 tomcat 中创建了两个独立的 Executor,它们通过 tomcat 中单独的连接器公开。这使我们能够将关键流量重定向到一个执行器,将非关键流量重定向到另一个执行器。这使我们能够为每个连接器设置不同的acceptorThreadCount值。以及通过具有不同的 minThreads 和 maxThreads 值来控制执行器线程。此更改仅是配置更改,不保证代码中的任何更改。

让我们通过一个小示例应用程序来讨论实现。

nginx.conf 更改

活动{}http{上游 front_upstream_ritic{    服务器tomcat:8080;    }上游 front_upstream_non_ritic { 服务器tomcat:8081; }映射 $request_method $upstream {        默认front_upstream_non_ritic;        POST front_upstream_ritic;    } 服务器 {    听9090;     位置〜^ /前端应用程序/ api / v1 / myresource /(关键路径1 |关键路径2 |关键路径3)$ {                   proxy_pass_request_body 开启;                   proxy_pass_request_headers 开启;                   proxy_set_header 主机 $host:8080;                   proxy_pass http://$upstream$uri$is_args$args;                   proxy_http_版本 1.1;                   proxy_set_header 连接“”;            }     位置 ~* /.* {                   proxy_pass_request_body 开启;                   proxy_pass_request_headers 开启;                   proxy_set_header 主机 $host:8081;                   proxy_pass http://front_upstream_non_ritic;                   proxy_http_版本 1.1;                   proxy_set_header 连接“”;            }}} 

一旦我们完成了两种不同类型的 URL 的拆分,我们将在 tomcat server.xml 中进行更改以添加执行器和连接器。请注意,我们已经为我们要添加的新连接器的应用程序添加了端口 8081。

Tomcat服务器变更

                                                                                    

示例 Docker 撰写文件以及上述更改

版本:'3.8'服务:    雄猫:        图片:tomcat:9.0.63        端口:            - “8080:8080”            - “8081:8081”        卷:            - ./webapps:/usr/local/tomcat/webapps            - ./conf/server.xml:/usr/local/tomcat/conf/server.xml        网络:            - 应用程序网络    nginx:        图片:nginx:最新        端口:            - “9090:9090”        卷:            - ./nginx/nginx.conf:/etc/nginx/nginx.conf        网络:            - 应用程序网络网络:    应用程序网络:        司机:桥

请注意,我们将覆盖 tomcat 容器中的 server.xml 和 nginx 容器中的 nginx.conf,并通过上述更改打开我们在 ports 下的 server.xml 中指定的额外端口。

吐槽大师 吐槽大师

吐槽大师(Roast Master) – 终极 AI 吐槽生成器,适用于 Instagram,Facebook,Twitter,Threads 和 Linkedin

吐槽大师 26 查看详情 吐槽大师

通过这个,我们现在使用相同的前端应用程序,我们能够以这样的方式隔离执行,即非关键慢速事务不会阻塞 tomcat 线程,并且不会影响关键事务流量延迟。

使用上面的 docker compose 使用测试 API 项目运行此程序会得到以下结果。

server.xml 中指定的前缀与线程号一起打印在下面。

2024-06-25 17:05:15 25-Jun-2024 11:35:15.452 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars 至少扫描了一个 JAR 的 TLD,但不包含 TLD。为此记录器启用调试日志记录,以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。2024-06-25 17:06:08 25-Jun-2024 11:36:07.999 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Web 应用程序存档的部署 [/usr/local/tomcat/webapps/ group-2.6.4.war] 已在 [103,096] 毫秒内完成2024-06-25 17:06:08 25-Jun-2024 11:36:08.025 INFO [main] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler ["http-nio-8080"]2024-06-25 17:06:08 25-Jun-2024 11:36:08.038 INFO [main] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler ["http-nio-8081"]2024-06-25 17:06:08 25-Jun-2024 11:36:08.040 INFO [main] org.apache.catalina.startup.Catalina.start 服务器启动时间为 [103243] 毫秒2024-06-25 17:06:09 2024 年 6 月 25 日 11:36:09.079 信息 [nonCriticalExecGroup-1] com.tomcat.group.GroupApplication$AttachmentsNonMTController.endpoint2 AttachmentsNonMTController 控制器 - 线程:nonCriticalExecGroup-12024-06-25 17:06:09 2024 年 6 月 25 日 11:36:09.079 信息 [nonCriticalExecGroup-2] com.tomcat.group.GroupApplication$AttachmentsNonMTController.endpoint2 AttachmentsNonMTController 控制器 - 线程:nonCriticalExecGroup-2
2024-06-25 17:07:59 2024 年 6 月 25 日 11:37:59.146 信息 [riticalExecGroup-3] com.tomcat.group.GroupApplication$MessageRequestsMTController.getMT MessageRequestsMTController 控制器 - 线程:riticExecGroup-32024-06-25 17:10:17 2024 年 6 月 25 日 11:40:17.551 信息 [riticalExecGroup-4] com.tomcat.group.GroupApplication$MessageRequestsMTController.getMT MessageRequestsMTController 控制器 - 线程:riticExecGroup-42024-06-25 17:10:18 2024 年 6 月 25 日 11:40:18.801 信息 [riticalExecGroup-5] com.tomcat.group.GroupApplication$MessageRequestsMTController.getMT MessageRequestsMTController 控制器 - 线程:riticExecGroup-52024-06-25 17:10:19 2024 年 6 月 25 日 11:40:19.428 信息 [riticalExecGroup-6] com.tomcat.group.GroupApplication$MessageRequestsMTController.getMT MessageRequestsMTController 控制器 - 线程:riticExecGroup-6

这种 tomcat 的配置可以用在我们想要将执行划分到不同的线程池的地方。

以上就是创建 Tomcat 线程池以获得更好的吞吐量的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/519612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 04:49:02
下一篇 2025年11月9日 04:53:24

相关推荐

  • 如何使用 Ant Design 实现自定义的 UI 设计?

    如何使用 Ant Design 呈现特定的 UI 设计? 一位开发者提出: 我希望使用 Ant Design 实现如下图所示的 UI。作为一个前端新手,我不知从何下手。我尝试使用 a-statistic,但没有任何效果。 为此,提出了一种解决方案: 可以使用一个图表库,例如 echarts.apac…

    2025年12月24日
    000
  • Antdv 如何实现类似 Echarts 图表的效果?

    如何使用 antdv 实现图示效果? 一位前端新手咨询如何使用 antdv 实现如图所示的图示: antdv 怎么实现如图所示?前端小白不知道怎么下手,尝试用了 a-statistic,但没有任何东西出来,也不知道为什么。 针对此问题,回答者提供了解决方案: 可以使用图表库 echarts 实现类似…

    2025年12月24日
    300
  • 如何使用 antdv 创建图表?

    使用 antdv 绘制如所示图表的解决方案 一位初学前端开发的开发者遇到了困难,试图使用 antdv 创建一个特定图表,却遇到了障碍。 问题: 如何使用 antdv 实现如图所示的图表?尝试了 a-statistic 组件,但没有任何效果。 解答: 虽然 a-statistic 组件不能用于创建此类…

    2025年12月24日
    200
  • 如何在 Ant Design Vue 中使用 ECharts 创建一个类似于给定图像的圆形图表?

    如何在 ant design vue 中实现圆形图表? 问题中想要实现类似于给定图像的圆形图表。这位新手尝试了 a-statistic 组件但没有任何效果。 为了实现这样的图表,可以使用 [apache echarts](https://echarts.apache.org/) 库或其他第三方图表库…

    好文分享 2025年12月24日
    100
  • echarts地图中点击图例后颜色变化的原因和修改方法是什么?

    图例颜色变化解析:echarts地图的可视化配置 在使用echarts地图时,点击图例会触发地图颜色的改变。然而,选项中并没有明确的配置项来指定此颜色。那么,这个颜色是如何产生的,又如何对其进行修改呢? 颜色来源:可视化映射 echarts中有一个名为可视化映射(visualmap)的对象,它负责将…

    2025年12月24日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • css网页设计模板怎么用

    通过以下步骤使用 CSS 网页设计模板:选择模板并下载到本地计算机。了解模板结构,包括 index.html(内容)和 style.css(样式)。编辑 index.html 中的内容,替换占位符。在 style.css 中自定义样式,修改字体、颜色和布局。添加自定义功能,如 JavaScript …

    2025年12月24日
    000
  • nginx的css不起作用怎么办

    nginx的css不起作用是因为误删文件导致的,其解决办法就是打开相应的文件并添加代码“include /etc/nginx/mime.types;”,然后重启Nginx守护即可。 本文操作环境:windows7系统、css3版,DELL G3电脑。 nginx的css不起作用是什么原因? 最近部署…

    2025年12月24日 好文分享
    000
  • apache不加载css文件怎么办

    apache不加载css文件的解决办法:1、删除中文字符,使用unicode代替;2、将css文件另存为utf-8格式;3、检查css路径,打开浏览器看是否报404错误;4、使用chmod 777 css文件,给文件添加读取权限。 本教程操作环境:Windows7系统、HTML5&&…

    2025年12月24日
    000
  • CSS如何实现任意角度的扇形(代码示例)

    本篇文章给大家带来的内容是关于CSS如何实现任意角度的扇形(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 扇形制作原理,底部一个纯色原形,里面2个相同颜色的半圆,可以是白色,内部半圆按一定角度变化,就可以产生出扇形效果 扇形绘制 .shanxing{ position:…

    2025年12月24日
    000
  • html如何设置新版本_为HTML页面设置版本更新提示【提示】

    可通过meta标签检测、Service Worker监听、Last-Modified头比对、manifest.json校验四种方式提示HTML页面新版本更新。 如果您希望用户在访问HTML页面时获知存在新版本并提示更新,可以通过客户端缓存控制与版本标识机制触发提示行为。以下是实现该功能的多种方法: …

    2025年12月23日
    000
  • html5怎样插入可预览文档_html5文档预览功能实现与控件选择【步骤】

    HTML5文档预览有五种方式:一、用iframe嵌入Google Docs等在线服务;二、用embed/object标签加载同源PDF;三、集成PDF.js实现自定义渲染;四、用FileReader配合Office Online Viewer预览Office文件;五、后端转HTML再前端加载。 如果…

    2025年12月23日
    000
  • php如何html_在PHP代码中输出HTML内容【输出】

    必须确保PHP正确解析并输出原始HTML字符串而非转义文本;可通过echo/print直接输出、heredoc语法处理多行含变量HTML,或用PHP结束标签切换至纯HTML模式。 如果您在PHP脚本中需要将HTML代码作为响应内容发送给浏览器,则必须确保PHP正确解析并输出原始HTML字符串,而非将…

    2025年12月23日
    000
  • 运行html报错404怎么改_改html运行404错误方法【技巧】

    404错误是因服务器找不到资源,解决方法包括:检查文件路径与URL一致,确认文件在服务器根目录;启动Web服务器并测试localhost首页;核对配置文件的DocumentRoot和DirectoryIndex设置;排查文件名大小写及扩展名错误;使用浏览器开发者工具查看Network中404请求的具…

    2025年12月23日
    000
  • html5乱码怎么设置_html5用meta charset=utf-8设编码防页面乱码【设置】

    HTML5中文乱码需四步解决:一、在首行添加 如果您在浏览 HTML5 页面时遇到中文显示为乱码的情况,则可能是由于网页未正确声明字符编码。以下是解决此问题的步骤: 一、在 head 中添加 meta charset 声明 HTML5 推荐使用 meta charset=”UTF-8&#…

    2025年12月23日
    000
  • 如何让别人下载html_设置HTML文件供他人下载链接【链接】

    可通过四种方法强制下载HTML文件:一、用download属性设超链接;二、服务端配置Content-Disposition响应头;三、打包为ZIP提供下载;四、用JavaScript生成Blob并触发下载。 如果您希望他人能够直接下载某个HTML文件,而非在浏览器中打开查看,需要通过特定方式设置链…

    2025年12月23日
    000
  • putty怎么运行html_putty连接环境运行html方法【教程】

    1、可通过本地浏览器查看:使用SFTP下载HTML文件后双击用默认浏览器打开预览;2、启动轻量级Web服务器:在PuTTY中用Python命令python3 -m http.server 8000运行并本地访问服务器IP:8000查看;3、配置Apache:安装Apache2服务,将HTML文件放入…

    2025年12月23日
    000
  • 如何写html模板_编写可复用的HTML模板文件【复用】

    可复用HTML模板有五种方法:一、服务端包含(SSI);二、JavaScript动态加载;三、Web Components自定义元素;四、构建工具(如EJS+Webpack)预编译;五、iframe嵌入。 如果您希望在多个网页中重复使用相同的HTML结构,避免每次手动编写重复代码,则需要创建可复用的…

    2025年12月23日
    000
  • eclipse怎么运行html页面_eclipse运行html页面步骤【指南】

    答案:在Eclipse中运行HTML页面需确保项目为Web类型,将HTML文件置于WebContent目录,通过右键“Open With → Web Browser”使用内置或外部浏览器预览,若配置了Tomcat等服务器可部署后通过localhost访问,整个过程依赖正确项目结构与浏览器设置。 在E…

    2025年12月23日
    000
  • eclipse运行html怎么找不到_解eclipse运行html找不到文件问题【技巧】

    首先检查项目是否已正确发布到服务器,确保HTML文件位于WebContent等Web根目录下,并使用包含上下文路径的完整URL访问;若问题仍存,可清理并重建项目,同时确认通过“Run on Server”方式运行而非直接打开浏览器。 如果您在Eclipse中运行HTML文件时提示找不到文件,可能是由…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信