对于acceptCount
这个参数,含义跟字面意思并不是特别一致(个人感觉),容易跟maxConnections
,maxThreads
等参数混淆;实际上这个参数在tomcat里会被映射成backlog
:
static {
replacements.put("acceptCount", "backlog");
replacements.put("connectionLinger", "soLinger");
replacements.put("connectionTimeout", "soTimeout");
replacements.put("rootFile", "rootfile");
}
backlog表示积压待处理的事物,是socket的参数,在bind的时候传入的,比如在Endpoint
里的bind方法里:
public void bind() throws Exception {
serverSock = ServerSocketChannel.open();
...
serverSock.socket().bind(addr,getBacklog());
...
}
这个参数其实设置的是TCP的完全连接队列的大小。不过即便设置了acklog
参数,linux也会和/proc/sys/net/core/somaxconn
这两个值作比较,哪个值小选哪个,somaxconn默认是128,所以在将tomcat-connector的acceptCount参数设置大时,也得将somaxconn的值设置大一些
设置方法:
sysctl -w net.core.somaxconn=32767