tomcat参数详解

connectionTimeout:连接超时时间(单位:毫秒,默认值:60000),tomcat接受连接后到客户端首次发送数据的最大等待时间,如果超过此时间,tomcat将会主动关闭连接
keepAliveTimeout:长连接最大空闲时间(单位:毫秒,默认值:等于connectionTimeout),表示长连接两次请求之间最大等待时间,该长连接最后一次请求后等待此时间仍然没有接收到另一个请求,tomcat将会主动关闭连接
maxKeepAliveRequests:长连接最大请求数(默认值:100,1表示禁用长连接,-1表示不限制),该长连接请求次数达到此数值后,tomcat将会主动关闭连接

maxConnections:最大连接数(NIO和NIO2默认值:10000,APR/native默认值:8192),表示tomcat同一时间最多能处理的连接数,超过这个数后,tomcat将暂停accept(),此时操作系统仍然可以接受连接并放在操作系统的accept队列中,accept队列的最大数量由acceptCount来决定
acceptCount:accept队列最大值(默认值:100),对应backlog参数,backlog表示accept队列最多能有backlog+1个连接,backlog=min(net.core.somaxconn,backlog),其中net.core.somaxconn默认值为128,所以acceptCount如果设置大于128,则需要调整somaxconn的大小。acceptCount控制tomcat端口对应的操作系统accept队列最大值,当操作系统的accept队列满了后,操作系统不再接受连接,此时,客户端发送SYN,服务器收到客户端的SYN后,将此连接存放在操作系统syn队列中【syn队列大小为max(64, net.ipv4.tcp_max_syn_backlog),tcp_max_syn_backlog默认值:128,在syncookies启用的情况下(net.ipv4.tcp_syncookies设置为1),当syn队列满了后,新的SYN请求将使用syncookie机制,简单说syncookies就是将连接信息编码在ISN(initialsequencenumber)中返回给客户端,这时server不需要将半连接保存在syn队列中,而是利用客户端随后发来的ACK带回的ISN还原连接信息,以完成连接的建立,避免了syn队列被攻击SYN包填满。】,然后,服务器再发送SYN+ACK给客户端,客户端收到服务器的SYN+ACK后,发送ACK给服务器(第3次握手,此时,客户端处于ESTABLISHED状态,服务器处于SYN_RECV状态),服务器收到客户端的ACK后,如果accept队列没有满,则将此连接从syn队列移到accept队列,如果accept队列已满,将会如下处理:
1、当net.ipv4.tcp_abort_on_overflow=0的时候
服务器收到客户端发送过来的ACK时,如果accept队列已满则直接丢弃此ACK,此连接仍然在syn队列中,此后,服务器没有收到客户端的ACK或者客户端的ACK因为accept队列已满被服务器丢弃了,服务器会重发SYN+ACK(重发次数:net.ipv4.tcp_synack_retries,默认5次,分别为1s、2s、4s、8s、16s后重试,然后再等32s,总时间为63秒。如果服务器重发SYN+ACK超时(达到63秒),仍然没有收到客户端的ACK或者客户端的ACK因为accept队列已满被服务器丢弃了,则服务器会断开连接,客户端会提示Connection reset by peer,此连接从syn队列移除。如果服务器重发SYN+ACK在超时之前,收到了客户端的ACK或PSH+ACK(客户端重传数据包)且此时accept队列没有满(应用程序调用了accept()从accept队列中获取了连接),则服务器接受此ACK,并将此连接从syn队列移到accept队列
2、当net.ipv4.tcp_abort_on_overflow=1的时候
服务器收到客户端发送过来的ACK时,如果accept队列已满则直接断开连接,并将此连接从syn队列移除,客户端会提示Connection reset by peer
PS:acceptCount的描述以linux系统为基础,windows系统略有不同(accept队列最多能有backlog个连接,而不是backlog+1个连接,当accept队列已满时,客户端是SYN_SENT状态,而不是ESTABLISHED状态,服务器也不是SYN_RECV状态,服务器netstat看不到这个连接)
maxThreads:最大线程数(默认值:200),表示tomcat最多有多少个处理请求的线程,相当于线程池中的maximumPoolSize参数
minSpareThreads:最小线程数(默认值:10),表示tomcat最少有多少个处理请求的线程,相当于线程池中的corePoolSize参数

注意:tomcat同一时间能接受连接的最大数量=maxConnections+acceptCount,只要tomcat已经接受的连接,最终都会由tomcat处理,除非客户端自己不想等了主动断开连接(比如:客户端设置的socketTimeout超时了)

标签: tomcat参数详解

添加新评论