Glassfish 线程池、接受器线程、HTTP 最大连接数

Glassfish Thread Pool, Acceptor Threads, HTTP Max Connections

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

线程池:

HTTP:

传输 TCP:

先给大家一些官方文档

线程池

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

请记住,线程的请求寿命会很长。也就是说,不仅在从套接字读取 HTTP 请求时,或者在向客户端写入 HTTP 响应时,而且它一直在处理业务逻辑,等待 DB 完成,写入日志文件,sending/receiving WS mehtods,. ..

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

HTTP 最大连接数

HTTP 服务器正在侦听客户端请求,并且每个客户端都有一个关联的连接队列,其中请求正在排队等待来自 线程池.[=14= 的线程处理]

此处是等待服务排队请求的线程所在的位置。

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

传输接受器线程

是一个数字,表示在任何时候每个侦听套接字有多少线程可以在 accept mode 中容纳您的服务器。 Oracles 文档建议将此数字设置为低于 CPU 的数字。

也就是说,这是同时 reading/writing 的套接字数。您可以想到与线程池的直接关系,但请记住线程不仅用于 read/write from/to 客户端,还用于处理请求。

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

我的解释

因此,您的服务器将为每个客户端 (listen socket) 建立一个队列,其中不能超过 Max Connections。此连接将由 线程池 处理,同时它不能超过 Acceptor Threads processing/accepted 个套接字。

如果客户端请求等待超过超时,它将被拒绝。 最小线程池 确保您有最少的线程准备好进行处理。 Max Connection Count 限制了您可以等待的 listen sockets 总数。如果超过最后一个限制,新连接将被拒绝。

希望对您有所帮助。