Glassfish线程池、接收器线程和HTTP最大连接数。

10
请查看附加的图片,帮助我理解线程池(最大和最小线程池大小)、接收器线程以及其最大连接数和HTTP最大连接数之间的关系。
线程池:

enter image description here

HTTP:

enter image description here

传输控制协议 TCP:

enter image description here

1个回答

10

首先,我会给你一些官方文档。

线程池

线程池是服务器可以处理的最大同时请求数。服务器有一个连接队列等待被线程处理。

请记住,一个线程将贯穿整个请求生命周期。也就是说,当它在处理业务逻辑、等待数据库完成、写入日志文件、发送/接收 WS 方法时,不仅是读取来自套接字的 HTTP 请求或向客户端写入 HTTP 响应时。

阅读:https://docs.oracle.com/cd/E18930_01/html/821-2431/abehk.html

HTTP 最大连接数

HTTP 服务器正在侦听客户端请求,并且每个客户端都有一个相关联的连接队列,其中请求在等待从 线程池 中的线程进行处理。

这是存放等待服务的线程的地方。

阅读:https://docs.oracle.com/cd/E18930_01/html/821-2431/abegk.html

传输接受器线程

这个数字表示每个侦听套接字同时可以容纳多少个线程处于 accept mode。Oracle 的文档建议将此数字保持在 CPU 数量以下。

也就是说,这是同时进行读/写的套接字数量。您可以认为它与线程池有直接关系,但请记住,一个线程不仅仅是从/向客户端读取/写入,还要处理请求。

阅读:http://docs.oracle.com/cd/E18930_01/html/821-2431/gkxjt.html

我的解释

因此,您的服务器将为每个客户端(侦听套接字)设置一个队列,其中不能超过最大连接数。这些连接将由线程池处理,同时不能有超过接受者线程处理/接受套接字。

如果客户端请求等待时间超过超时时间,则会被拒绝。 最小线程池 确保您具有最少数量的线程,准备进行处理。而最大连接计数限制了您可以等待的侦听套接字 的总数。如果超过此限制,新连接将被拒绝。

希望能对您有所帮助。


马拉古纳,你能否为你的解释提供一个图示表示吗?这将有助于我理解内部机制。 - Kenshin
每个客户端都有一个队列?那是什么意思?比如说,有5个来自不同客户端的并行请求。所以你的意思是会有5个等待服务的队列。每个队列长度为4096? - Kenshin
抱歉造成困惑,我刚刚重新阅读了一下,发现表述不太清晰。在“每个客户端”这句话中,我指的是每个监听器,而不是每个访问您Web应用程序的人,对此感到抱歉。这就是为什么我在括号中加入了“侦听套接字”的原因,但这有点令人困惑。为了澄清,请阅读以下内容:https://blogs.oracle.com/binublog/entry/glassfish_tuning_http_connection_queue 的第一段非常明确。 - malaguna
那么,同时进行的 HTTP 监听器可以同时处理 4096 个请求吗?还是这取决于线程池计数?我假设所有请求都被放入此队列中,如果线程池计数为 500,则首先从此队列中同时获取前 500 个请求并开始处理,这是什么意思吗? - Kenshin
一个HTTP监听器可以保持一定数量的最大连接数请求,这些请求等待在池中的空闲线程上进行处理,所以你是正确的。但要注意,处理不是同时进行的,而是并发进行的...这是不同的。 - malaguna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接