• 问题

springboot内置了tomcat, 并给我们设置了默认参数, 我们怎么样修改springboot内置的tomcat参数, 才能使我们的服务效率更高呢?

  • 解决

Spring Boot能支持的最大并发量主要看其置tomcat的配置, 可以在配置文件中对其进行更改。
详细的默认配置参数可以在以下路径进行查看:
org\springframework\boot\spring-boot-autoconfigure\2.5.2\spring-boot-autoconfigure-2.5.2.jar!\META-INF\spring-configuration-metadata.json

这个是springboot自动配置的包, 不同版本的springboot可能会有一些差异, 我们引用了web的starter, springboot就会自动帮我们配置启动tomcat,
当我们需要对参数修改时, 我们只需要在自己的项目文件进行配置即可。

  • 默认参数

服务器在任何给定时间接受和处理的最大连接数。 一旦达到限制,操作系统仍然可以根据“acceptCount”属性接受连接。

server.tomcat.max-connections: 8192

当所有可能的请求处理线程都在使用时,传入连接请求会被放进队列中等待,等待队列的最大队列长度。

server.tomcat.accept-count: 100

服务器在给定时间能接受的连接数为server.tomcat.max-connections, 但并不是同时在工作,最大工作线程数。

server.tomcat.threads.max: 200

有最大的工作线程数, 就有最小工作线程数。

server.tomcat.threads.min-spare: 10

用于解码 URI 的字符编码。

server.tomcat.uri-encoding: UTF-8

任何 HTTP POST请求中表单内容的最大大小。理论上POST请求的大小是无限制的,但是tomcat设定了请求大小为两兆,如要取消限制,则应该将值设为 -1。

server.tomcat.max-http-form-post-size: 2MB

请求正文的大小。

server.tomcat.max-swallow-size: 2MB

连接器在接受连接后将等待呈现请求 URI 行的时间。即socket调用read()等待读取的时间,如果在设置的时间内没有请求,则会主动断开连接

server.tomcat.connection-timeout: 60000ms

在连接关闭之前等待另一个 HTTP 请求的时间。默认和 connectionTimeout的值一样。 设置为 -1 时不会超时。

server.tomcat.keep-alive-timeout: (Duration)

Maximum number of HTTP requests that can be pipelined before the connection is closed. When set to 0 or 1, keep-alive and pipelining are disabled. When set to -1, an unlimited number of pipelined or keep-alive requests are allowed.
在连接关闭之前可以通过管道传输的最大 HTTP 请求数。 当设置为 0 或 1 时,长连接和管道被禁用,可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。 当设置为 -1 时,允许无限数量的管道或长连接请求。
即表示该连接最大支持的请求数。超过该请求数的连接也将被关闭(此时就会返回一个Connection: close头给客户端)

server.tomcat.max-keep-alive-requests: 100

其他一些不常用的设置


# 是否缓冲输出,使其仅定期刷新。
server.tomcat.accesslog.buffered: true

# 是否检查日志文件是否存在,以便在外部进程重命名它时可以重新创建它。
server.tomcat.accesslog.check-exists: false

# 是否仅在“ServletRequest.getAttribute(conditionIf)”不产生 null 时才启用请求的日志记录。
server.tomcat.accesslog.condition-if: String

# 是否仅在“ServletRequest.getAttribute(conditionUnless)”产生 null 时才启用请求记录。
server.tomcat.accesslog.condition-unless: String

# 创建日志文件的目录。 可以是绝对的或相对于 Tomcat 基本目录。
server.tomcat.accesslog.directory: logs

# 启用访问日志。
server.tomcat.accesslog.enabled: false

# 日志文件使用的字符集。 默认为系统默认字符集。
server.tomcat.accesslog.encoding: String

# 放置在日志文件名中的日期格式。
server.tomcat.accesslog.file-date-format: .yyyy-MM-dd

# 是否使用 RFC 5952 定义的 IPv6 规范表示格式。
server.tomcat.accesslog.ipv6-canonical: false

# 用于格式化日志条目和日志文件名后缀中的时间戳的语言环境。 默认为 Java 进程的默认语言环境。
server.tomcat.accesslog.locale: String

# 删除访问日志文件之前保留的天数。
server.tomcat.accesslog.max-days: -1

# 访问日志的格式模式。
server.tomcat.accesslog.pattern: common

# 日志文件名前缀。
server.tomcat.accesslog.prefix: access_log

# 是否推迟在文件名中包含日期戳,直到轮换时间。
server.tomcat.accesslog.rename-on-rotate: false

# 为请求使用的 IP 地址、主机名、协议和端口设置请求属性。
server.tomcat.accesslog.request-attributes-enabled: false

# 是否启用访问日志轮换。
server.tomcat.accesslog.rotate: true

# 日志文件名后缀。
server.tomcat.accesslog.suffix: .log

# 逗号分隔的附加模式列表,匹配 jar 以忽略 TLD 扫描。 特殊的“?” 和 '*' 字符可以在模式中使用,以分别匹配一个和一个字符以及零个或多个字符。
server.tomcat.additional-tld-skip-patterns: List<String>

# 调用 backgroundProcess 方法之间的延迟。 如果未指定持续时间后缀,则将使用秒。
server.tomcat.background-processor-delay: 10s

# Tomcat 基目录。 如果未指定,则使用临时目录。
server.tomcat.basedir: File

# 是否应该启用 Tomcat 的 MBean Registry。
server.tomcat.mbeanregistry.enabled: false

# 将保留在缓存中并在后续请求中重用的最大空闲处理器数。 当设置为 -1 时,缓存将不受限制,理论上的最大大小等于最大连接数。
server.tomcat.processor-cache: 200

# 是否应通过将 / 附加到路径来重定向对上下文根的请求。 使用在代理处终止的 SSL 时,此属性应设置为 false。
server.tomcat.redirect-context-root: true

# URI 路径中应允许的其他未编码字符的逗号分隔列表。 只允许使用“< > [ \ ] ^ ` { | }”。
server.tomcat.relaxed-path-chars: List<Character>

# URI 查询字符串中应允许的其他未编码字符的逗号分隔列表。 只允许使用“< > [ \ ] ^ ` { | }”。
server.tomcat.relaxed-query-chars: List<Character>

# 从中提取远程主机的 HTTP 表头的名称。
server.tomcat.remoteip.host-header: X-Forwarded-Host

# 匹配要信任的代理的正则表达式。
server.tomcat.remoteip.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

# 用于覆盖原始端口值的 HTTP 标头的名称。
server.tomcat.remoteip.port-header: X-Forwarded-Port

# 包含传入协议的标头,通常命名为“X-Forwarded-Proto”。
server.tomcat.remoteip.protocol-header: X-Forwarded-Proto

# 指示传入请求是否使用 SSL 的协议头的值.
server.tomcat.remoteip.protocol-header-https-value: https

# 从中提取远程 IP 的 HTTP 表头的名称。 例如,`X-FORWARDED-FOR`。
server.tomcat.remoteip.remote-ip-header: X-FORWARDED-FOR

# 此 Web 应用程序是否允许静态资源缓存。
server.tomcat.resource.allow-caching: true

# 静态资源缓存的生存时间。
server.tomcat.resource.cache-ttl: Duration

# 通过调用 sendRedirect 生成的 HTTP 1.1 和更高版本的位置标头将使用相对重定向还是绝对重定向。
server.tomcat.use-relative-redirects: false

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐