tomcat的那些默认配置
前些天在qq群,一位同学在使用富文本编辑器的时候,遇见了莫名其妙的错误。对应字段明明填写了,但是总是提示不能为空。
经过多方面排查,发现是因为tomcat的最大post表单大小是2M,他这个富文本的内容远远超过了2M..
所以整理一下springboot项目中server.tomcat默认配置的整理,供大家学习使用。
线程配置
server.tomcat.threads.max:最大工作线程数,默认值为200。每一次HTTP请求到达Web服务,Tomcat都会创建一个线程来处理该请求,此参数决定了Web服务容器可以同时处理多少个请求。不过,增加线程是有成本的,更多的线程会带来更多的线程上下文切换成本,并且意味着更多的内存消耗。例如,JVM中默认情况下在创建新线程时会分配大小为1M的线程栈。线程数的经验值为:1核2G内存,线程数经验值200;4核8G内存,线程数经验值800。server.tomcat.threads.min-spare:最小工作空闲线程数,默认值为10。
连接配置
server.tomcat.max-connections:服务器在任何给定时间接受和处理的最大连接数。对于Java的阻塞式BIO,默认值是max-threads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中max-threads的值。对于Java新的NIO模式,默认值是10000;对于windows上APR/native IO模式,默认值为8192 ,这是出于性能原因,如果配置的值不是1024的倍数,max-connections的实际值将减少到1024的最大倍数。如果设置为 -1,则禁用max-connections功能,表示不限制Tomcat容器的连接数。server.tomcat.accept-count:等待队列的最大队列长度,默认值为100。当所有可能的请求处理线程都在使用时,传入连接请求会被放进队列中等待。如果等待队列也被放满了,这时再来新的请求就会被Tomcat拒绝(connection refused)。
编码配置
server.tomcat.uri-encoding:用于解码URI的字符编码,默认值为UTF-8。
请求大小配置
server.tomcat.max-http-form-post-size:任何HTTP POST请求中表单内容的最大大小,默认值为2MB。理论上POST请求的大小是无限制的,但是Tomcat设定了请求大小为2MB,如要取消限制,则应该将值设为 -1。server.tomcat.max-swallow-size:请求正文的大小,默认值为2MB。
超时配置
server.tomcat.connection-timeout:连接器在接受连接后将等待呈现请求URI行的时间,即socket调用read()等待读取的时间,如果在设置的时间内没有请求,则会主动断开连接,默认值为60000ms。server.tomcat.keep-alive-timeout:在连接关闭之前等待另一个HTTP请求的时间,默认和connection-timeout的值一样,设置为 -1 时不会超时。
其他配置
server.tomcat.max-keep-alive-requests:在连接关闭之前可以通过管道传输的最大HTTP请求数。当设置为0或1时,长连接和管道被禁用,可以避免Tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免Tomcat假死。当设置为 -1 时,允许无限数量的管道或长连接请求,默认值为100。server.tomcat.accesslog.enabled:是否启用访问日志,默认值为false。server.tomcat.basedir:存放Tomcat的日志、Dump等文件的临时文件夹,默认为系统的tmp文件夹(如:C:\Users\Angel\AppData\Local\Temp)。server.tomcat.max-http-header-size:HTTP消息头的最大大小,默认值为0,表示使用连接器的容器特定默认值。server.tomcat.max-http-post-size:HTTP POST内容的最大大小,默认值为2097152字节(即2MB)。server.tomcat.redirect-context-root:是否应通过在路径后附加/来重定向到上下文根的请求,默认值为true。server.tomcat.use-relative-redirects:HTTP 1.1及更高版本的sendRedirect调用生成的位置头是否使用相对或绝对重定向,默认未设置。server.tomcat.accesslog.buffered:是否缓冲输出,使其仅定期刷新,默认值为true。server.tomcat.accesslog.check-exists:是否检查日志文件是否存在,以便在外部进程重命名它时可以重新创建它,默认值为false。server.tomcat.accesslog.condition-if:仅在ServletRequest.getAttribute(conditionIf)不产生null时才启用请求的日志记录,默认未设置。server.tomcat.accesslog.condition-unless:仅在ServletRequest.getAttribute(conditionUnless)产生null时才启用请求记录,默认未设置。server.tomcat.accesslog.directory:创建日志文件的目录,可以是绝对的或相对于Tomcat基本目录,默认值为logs。server.tomcat.accesslog.encoding:日志文件使用的字符集,默认为系统默认字符集。server.tomcat.accesslog.file-date-format:放置在日志文件名中的日期格式,默认值为.yyyy-MM-dd。server.tomcat.accesslog.ipv6-canonical:是否使用RFC 5952定义的IPv6规范表示格式,默认值为false。server.tomcat.accesslog.locale:用于格式化日志条目和日志文件名后缀中的时间戳的语言环境,默认为Java进程的默认语言环境。server.tomcat.accesslog.max-days:删除访问日志文件之前保留的天数,默认值为 -1,表示不删除。server.tomcat.accesslog.pattern:访问日志的格式模式,默认值为common。server.tomcat.accesslog.prefix:日志文件名前缀,默认值为access_log。server.tomcat.accesslog.rename-on-rotate:是否推迟在文件名中包含日期戳,直到轮换时间,默认值为false。server.tomcat.accesslog.request-attributes-enabled:是否为请求使用的IP地址、主机名、协议和端口设置请求属性,默认值为false。server.tomcat.accesslog.rotate:是否启用访问日志轮换,默认值为true。server.tomcat.accesslog.suffix:日志文件名后缀,默认值为.log。server.tomcat.additional-tld-skip-patterns:逗号分隔的附加模式列表,匹配jar以忽略TLD扫描,特殊的?和*字符可以在模式中使用,以分别匹配一个和一个字符以及零个或多个字符,默认未设置。server.tomcat.background-processor-delay:调用backgroundProcess方法之间的延迟,如果未指定持续时间后缀,则将使用秒,默认值为10秒。server.tomcat.mbeanregistry.enabled:是否应该启用Tomcat的MBean Registry,默认值为false。server.tomcat.processor-cache:将保留在缓存中并在后续请求中重用的最大空闲处理器数,当设置为 -1 时,缓存将不受限制,理论上的最大大小等于最大连接数,默认值为200。
这些默认配置可以通过在application.yml或application.properties文件中进行修改,以满足不同的项目需求。
