连接器【优化】
EndPoint中有
- Acceptor
- SocketProcessor
Tomcat线程池【优化】
- accepted() 函数中会将 SocketChannel 设置为非阻塞模式,然后交给 Selector 去处理
tomcat线程池与ThreadpoolExecutor不同是最大线程在加入任务队列前创建
- Acceptor线程只建立连接(接收数据交给后面处理),生成SocketChannel对象。放入poller缓冲队列。
- Acceptor的ServerSocketChannel设置为阻塞模式
- Acceptor和Poller是生产者消费者模式,通过queue通信。
- Poller连接轮询器(selector):主要负责不断轮询事件列表(接收数据)
- Tomcat使用Poller池,有多个Poller共同处理所有的客户端连接,所有的连接均摊给每个Poller处理。
- 找到就绪的io操作(channel,客户端发来数据),生成socketProcessor,使用worker线程处理
acceptCount与net.core.somaxconn的关系
- Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化) - hxwang - 博客园
- sync queue:net.ipv4.tcp_max_syn_backlog
accept queue:min(net.core.somaxconn,backlog)
- backlog 参数就是 Tomcat 中的acceptCount参数
acceptCount:tomcat设置的全链接队列长度。默认100。
- net.core.somaxconn:系统参数,acceptCount不能超过此数值。默认128
- maxConnections:Tomcat在任意时刻接收和处理的最大连接数。当Tomcat接收的连接数达到maxConnections时,Acceptor线程不会读取accept队列中的连接;这时accept队列中的线程会一直阻塞着,直到Tomcat接收的连接数小于maxConnections。如果设置为-1,则连接数不受限制。默认10000(nio)。
- Tomcat 的最大并发连接数等于maxConnections + acceptCount
- maxThreads:默认200。
- tomcat参数以及tcp连接-性能调优实验_mayongzhan_csdn的专栏-CSDN博客
最大连接数
maxConnection连接数+tcp全连接队列(三次握手全结束F)=tcp全连接的总数
【坑】max-http-header-size引起的oom
设置多少就会创建一个多大的Http11OutputBuffer。一定要控制大小。默认4k,可设置到8k。
max-http-header-size引起的oom - jack_peng的个人空间 - OSCHINA - 中文开源技术交流社区
Tomcat类加载器
其他
- 禁用掉AJP
- AJP处理静态资源比较好?