spring-boot app 的 keep-alive 配置
keep-alive configurations of spring-boot app
我正在尝试 fix/debug 在使用嵌入式 tomcat 的 spring-boot 网络应用程序中关闭连接过多的问题。出现问题是因为它关闭了应该保持活动状态的连接。
现在,我发现 tomcat 具有限制保持活动连接数的配置(请参阅 https://tomcat.apache.org/tomcat-8.5-doc/config/http.html 中的 maxKeepAliveRequests
)并且可能还有其他相关配置到这个问题。但我的问题是我看不到这些参数在哪里给出,或者如果使用默认值我该如何更改它们。
我的问题:我在哪里可以找到说明如何配置 spring-boot/embedded-tomcat 保持活动参数以及这些参数是哪些的文档?
这些是 tomcat 服务器的 configuration-properties:
server.tomcat.accept-count=100 # Maximum queue length for incoming connection requests when all possible request processing threads are in use.
server.tomcat.accesslog.buffered=true # Whether to buffer output such that it is flushed only periodically.
server.tomcat.accesslog.directory=logs # Directory in which log files are created. Can be absolute or relative to the Tomcat base dir.
server.tomcat.accesslog.enabled=false # Enable access log.
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd # Date format to place in the log file name.
server.tomcat.accesslog.pattern=common # Format pattern for access logs.
server.tomcat.accesslog.prefix=access_log # Log file name prefix.
server.tomcat.accesslog.rename-on-rotate=false # Whether to defer inclusion of the date stamp in the file name until rotate time.
server.tomcat.accesslog.request-attributes-enabled=false # Set request attributes for the IP address, Hostname, protocol, and port used for the request.
server.tomcat.accesslog.rotate=true # Whether to enable access log rotation.
server.tomcat.accesslog.suffix=.log # Log file name suffix.
server.tomcat.additional-tld-skip-patterns= # Comma-separated list of additional patterns that match jars to ignore for TLD scanning.
server.tomcat.background-processor-delay=10s # Delay between the invocation of backgroundProcess methods. If a duration suffix is not specified, seconds will be used.
server.tomcat.basedir= # Tomcat base directory. If not specified, a temporary directory is used.
server.tomcat.internal-proxies=10\.\d{1,3}\.\d{1,3}\.\d{1,3}|\
192\.168\.\d{1,3}\.\d{1,3}|\
169\.254\.\d{1,3}\.\d{1,3}|\
127\.\d{1,3}\.\d{1,3}\.\d{1,3}|\
172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|\
172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}|\
172\.3[0-1]{1}\.\d{1,3}\.\d{1,3}\
0:0:0:0:0:0:0:1\
::1 # Regular expression that matches proxies that are to be trusted.
server.tomcat.max-connections=10000 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-post-size=2MB # Maximum size of the HTTP post content.
server.tomcat.max-swallow-size=2MB # Maximum amount of request body to swallow.
server.tomcat.max-threads=200 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=10 # Minimum amount of worker threads.
server.tomcat.port-header=X-Forwarded-Port # Name of the HTTP header used to override the original port value.
server.tomcat.protocol-header= # Header that holds the incoming protocol, usually named "X-Forwarded-Proto".
server.tomcat.protocol-header-https-value=https # Value of the protocol header indicating whether the incoming request uses SSL.
server.tomcat.redirect-context-root=true # Whether requests to the context root should be redirected by appending a / to the path.
server.tomcat.remote-ip-header= # Name of the HTTP header from which the remote IP is extracted. For instance, `X-FORWARDED-FOR`.
server.tomcat.resource.allow-caching=true # Whether static resource caching is permitted for this web application.
server.tomcat.resource.cache-ttl= # Time-to-live of the static resource cache.
server.tomcat.uri-encoding=UTF-8 # Character encoding to use to decode the URI.
server.tomcat.use-relative-redirects= # Whether HTTP 1.1 and later location headers generated by a call to sendRedirect will use relative or absolute redirects.
有关详细信息,请查看 here。
并非所有 tomcat 属性都可以通过属性文件进行配置。 keep-alive
相关属性是这些属性之一,这意味着它们只能以编程方式配置。这是通过配置 WebServerFactoryCustomizer
bean 来完成的。您可以使用协议处理程序来设置 KeepAlive
设置。下面是一个例子:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
AbstractHttp11Protocol<?> protocolHandler = (AbstractHttp11Protocol<?>) connector
.getProtocolHandler();
protocolHandler.setKeepAliveTimeout(80000);
protocolHandler.setMaxKeepAliveRequests(500);
protocolHandler.setUseKeepAliveResponseHeader(true);
}
});
}
要了解有关这些设置的更多信息,请阅读 tomcat 9 configuration reference
我正在尝试 fix/debug 在使用嵌入式 tomcat 的 spring-boot 网络应用程序中关闭连接过多的问题。出现问题是因为它关闭了应该保持活动状态的连接。
现在,我发现 tomcat 具有限制保持活动连接数的配置(请参阅 https://tomcat.apache.org/tomcat-8.5-doc/config/http.html 中的 maxKeepAliveRequests
)并且可能还有其他相关配置到这个问题。但我的问题是我看不到这些参数在哪里给出,或者如果使用默认值我该如何更改它们。
我的问题:我在哪里可以找到说明如何配置 spring-boot/embedded-tomcat 保持活动参数以及这些参数是哪些的文档?
这些是 tomcat 服务器的 configuration-properties:
server.tomcat.accept-count=100 # Maximum queue length for incoming connection requests when all possible request processing threads are in use.
server.tomcat.accesslog.buffered=true # Whether to buffer output such that it is flushed only periodically.
server.tomcat.accesslog.directory=logs # Directory in which log files are created. Can be absolute or relative to the Tomcat base dir.
server.tomcat.accesslog.enabled=false # Enable access log.
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd # Date format to place in the log file name.
server.tomcat.accesslog.pattern=common # Format pattern for access logs.
server.tomcat.accesslog.prefix=access_log # Log file name prefix.
server.tomcat.accesslog.rename-on-rotate=false # Whether to defer inclusion of the date stamp in the file name until rotate time.
server.tomcat.accesslog.request-attributes-enabled=false # Set request attributes for the IP address, Hostname, protocol, and port used for the request.
server.tomcat.accesslog.rotate=true # Whether to enable access log rotation.
server.tomcat.accesslog.suffix=.log # Log file name suffix.
server.tomcat.additional-tld-skip-patterns= # Comma-separated list of additional patterns that match jars to ignore for TLD scanning.
server.tomcat.background-processor-delay=10s # Delay between the invocation of backgroundProcess methods. If a duration suffix is not specified, seconds will be used.
server.tomcat.basedir= # Tomcat base directory. If not specified, a temporary directory is used.
server.tomcat.internal-proxies=10\.\d{1,3}\.\d{1,3}\.\d{1,3}|\
192\.168\.\d{1,3}\.\d{1,3}|\
169\.254\.\d{1,3}\.\d{1,3}|\
127\.\d{1,3}\.\d{1,3}\.\d{1,3}|\
172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|\
172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}|\
172\.3[0-1]{1}\.\d{1,3}\.\d{1,3}\
0:0:0:0:0:0:0:1\
::1 # Regular expression that matches proxies that are to be trusted.
server.tomcat.max-connections=10000 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-post-size=2MB # Maximum size of the HTTP post content.
server.tomcat.max-swallow-size=2MB # Maximum amount of request body to swallow.
server.tomcat.max-threads=200 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=10 # Minimum amount of worker threads.
server.tomcat.port-header=X-Forwarded-Port # Name of the HTTP header used to override the original port value.
server.tomcat.protocol-header= # Header that holds the incoming protocol, usually named "X-Forwarded-Proto".
server.tomcat.protocol-header-https-value=https # Value of the protocol header indicating whether the incoming request uses SSL.
server.tomcat.redirect-context-root=true # Whether requests to the context root should be redirected by appending a / to the path.
server.tomcat.remote-ip-header= # Name of the HTTP header from which the remote IP is extracted. For instance, `X-FORWARDED-FOR`.
server.tomcat.resource.allow-caching=true # Whether static resource caching is permitted for this web application.
server.tomcat.resource.cache-ttl= # Time-to-live of the static resource cache.
server.tomcat.uri-encoding=UTF-8 # Character encoding to use to decode the URI.
server.tomcat.use-relative-redirects= # Whether HTTP 1.1 and later location headers generated by a call to sendRedirect will use relative or absolute redirects.
有关详细信息,请查看 here。
并非所有 tomcat 属性都可以通过属性文件进行配置。 keep-alive
相关属性是这些属性之一,这意味着它们只能以编程方式配置。这是通过配置 WebServerFactoryCustomizer
bean 来完成的。您可以使用协议处理程序来设置 KeepAlive
设置。下面是一个例子:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
AbstractHttp11Protocol<?> protocolHandler = (AbstractHttp11Protocol<?>) connector
.getProtocolHandler();
protocolHandler.setKeepAliveTimeout(80000);
protocolHandler.setMaxKeepAliveRequests(500);
protocolHandler.setUseKeepAliveResponseHeader(true);
}
});
}
要了解有关这些设置的更多信息,请阅读 tomcat 9 configuration reference