连接器【优化】

image.png
image.png
Tomcat - 图3
EndPoint中有

  • Acceptor
  • SocketProcessor

Tomcat线程池【优化】

image.png
image.png

  • accepted() 函数中会将 SocketChannel 设置为非阻塞模式,然后交给 Selector 去处理

tomcat线程池与ThreadpoolExecutor不同是最大线程加入任务队列前创建
image.png

  • Acceptor线程只建立连接(接收数据交给后面处理),生成SocketChannel对象。放入poller缓冲队列。
    • Acceptor的ServerSocketChannel设置为阻塞模式
    • Acceptor和Poller是生产者消费者模式,通过queue通信。
    • image.png
    • image.png
  • Poller连接轮询器(selector):主要负责不断轮询事件列表(接收数据)
    • Tomcat使用Poller池,有多个Poller共同处理所有的客户端连接,所有的连接均摊给每个Poller处理。
    • image.png
  • 找到就绪的io操作(channel,客户端发来数据),生成socketProcessor,使用worker线程处理
    • image.png

Tomcat Connector 组件浅析

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 - 图11

【坑】max-http-header-size引起的oom

Tomcat - 图12
设置多少就会创建一个多大的Http11OutputBuffer。一定要控制大小。默认4k,可设置到8k。
image.png
max-http-header-size引起的oom - jack_peng的个人空间 - OSCHINA - 中文开源技术交流社区

Tomcat类加载器

类加载

其他

  • 禁用掉AJP
    • AJP处理静态资源比较好?

image.png