JK 为每个 Web 服务器进程处理后端连接池中的连接。连接以持久模式使用。在请求成功完成后,我们保持连接打开并等待转发下一个请求。连接池能够根据希望并行转发请求的线程数量进行增长。
大多数应用程序的负载根据一天中的时间或月份中的日期而变化。连接池增长的其他原因可能是后端暂时变慢,导致前端(如 Web 服务器)的拥塞增加。许多后端为它们处理的每个传入连接使用一个专用线程。因此,通常人们希望在负载减少时连接池收缩。
JK 允许池中的连接在空闲一段时间后关闭。此最大空闲时间可以通过属性 connection_pool_timeout 配置,其单位为秒。默认值为“0”,这会禁用关闭空闲连接。
我们通常建议值在 10 分钟左右,因此将 connection_pool_timeout 设置为 600(秒)。如果您使用此属性,请同时在您的 Tomcat server.xml 配置文件中的 AJP Connector 元素中,将属性 keepAliveTimeout(如果已显式设置)或 connectionTimeout 设置为类似的值。注意:keepAliveTimeout 和 connectionTimeout 必须以毫秒为单位。因此,如果您将 JK connection_pool_timeout 设置为 600,您应该将 Tomcat keepAliveTimeout 或 connectionTimeout 设置为 600000。
JK 连接不会在超时过后立即关闭。相反,有一个每 60 秒运行一次的自动内部维护任务,检查所有连接的空闲状态。60 秒的间隔可以通过全局属性 worker.maintain 进行调整。我们不建议更改此值,因为它有很多副作用。直到 1.2.26 版本,维护任务仅在处理请求时运行。因此,如果您的 Web 服务器进程长时间未收到任何请求,则无法关闭其池中的空闲连接。从 1.2.27 版本开始,当使用带有线程 APR 的 Apache HTTP Server 2.x 或 Microsoft IIS 时,您可以配置一个独立的看门狗线程。
最大连接池大小可以通过属性 connection_pool_size 配置。我们通常不建议将此属性与 Apache HTTP Server 结合使用。对于 Apache,我们自动检测每个进程的线程数,并将最大池大小设置为此值。对于 Microsoft IIS,我们使用默认值 250(1.2.20 版本之前:10)。我们强烈建议为 IIS 调整此值,使其与单个 Web 服务器进程应能够并行发送到后端的请求数量相匹配。您应该测量在高峰时段需要多少连接而不会出现性能问题,然后根据您的增长率等添加一定的百分比。最后,您应该检查您的 Web 服务器进程是否能够使用至少与您配置的池大小相同数量的线程。
JK 属性 connection_pool_minsize 定义了当连接池缩小时保留的空闲连接数。默认情况下,这是最大池大小的一半。