gpt4 book ai didi

java - Tomcat 6 中请求的工作线程重用策略

转载 作者:行者123 更新时间:2023-11-30 05:01:20 26 4
gpt4 key购买 nike

我试图找到一些有关 Web 服务器(尤其是 Tomcat 6)中工作线程重用策略的文档,但找不到任何内容,因此向专家提出了这个问题!

根据我的理解,网络服务使用工作线程池来服务 http 请求。

在我们的应用程序中,我们确实在映射中维护一些信息,其中键是当前线程(有点绕回本地线程的方式)。

我们最近在代码中发现了一个错误,我们依赖这样一个事实:当 session 过期(我们配置为 2 小时)时,我们的 HttpSessionBindingListener 实现类将收到回调,并且在方法中我们将使用当前线程查询 map 并清理一些数据。这种方法的问题在于,Web 服务器并不总是为您提供一个与 2 小时前的同一 session 关联的工作线程,因此我们没有正确进行清理。

发现这个问题后,我实际上对另一个场景感到困惑。对于我们来说,我们已经看到这段代码在 80% 的情况下工作,即获得一个正确清理数据的工作线程。

我有点困惑为什么这会起作用?了解 servlet 容器内部结构的人可以对此有所了解吗?

最佳答案

从版本 6 开始,Tomcat 的线程池在不同组件之间共享:http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html

HTTP 连接器定义连接器可用的最大线程数:http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

两者都默认为 200。

如果您今天的命中率为 +-80%,我想您的应用程序在 80% 的时间内都没有处于重负载状态。例如。 Tomcat 平均仅使用池中的 1.5 个不同线程。我不知道如果激活异步 IO (AIO) 请求处理会发生什么。建议:转向 ThreadLocal 或其他,例如基于 session 的解决方案。

关于java - Tomcat 6 中请求的工作线程重用策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6606190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com