17. Tomcat调优

作者: 强某某 | 来源:发表于2020-03-06 12:17 被阅读0次

Tomcat网络处理线程模型

  • Tomcat7及以前(BIO+同步Servlet)


    1.png

一个请求,一个工作线程,CPU利用率低

  • Tomcat8(APR+异步Servlet)


    2.png

apr(Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。
JNI的形式调用Apache HTTP服务器的核心动态链接库在处理文件读取或网络传输操作。Tomcat默认监听指定路径,如果apr安装,则自动启用。

  • Tomcat8(NIO+异步Servlet)


    3.png

Tomcat8开始,默认NIO方式,因为上面的APR还需要自己处理维护动态链接库很麻烦。

NIO处理流程(Tomcat8)

  1. 接受器接受套接字
  2. 接收器从缓存中检索nioChannel对象
  3. Pollerthread将nioChannel注册到它的选择器IO事件
  4. 轮询器将nioChannel分配给一个work线程来处理请求
  5. SocketProcessor完成对请求的处理和返回


    4.png

Tomcat参数调优

5.png 6.png

所以,同样程序部署在windows和linux上面效果有区别,因为linux前面如图还有一个连接队列也可以缓存一些连接,所以linux理论上同样设置可以缓存更多的连接

  • 什么时候需要调整connections?如果调整?
    connections小于maxThread的时候;需要调大;最好是比预期的最高并发数要大20%;反正是堆积到tomcat的work处理线程池中(堆积占用内存)
  • 什么时候需要调整acceptCount?如果调整?
    想受理更多用户请求,却又不想堆积在tomcat中,利用操作系统来高效的堆积,可以调整为最高并发数-connections;
    实际上不需要调整,tomcat默认100,linux默认128,最好是把连接控制交给应用程序,这样方便管理。

启动方式:java -jar web-demo-1.1.0.jar --server.tomcat.ax-connections=1 -- server.tommcat.max-thread=1 --server.tomcat.acceptCount=1

7.png

整体架构

8.png

一般不用tomcat记录日志性能低而且不擅长,nginx专业中间件,可以限流并记录日志等

相关文章

网友评论

    本文标题:17. Tomcat调优

    本文链接:https://www.haomeiwen.com/subject/sxjbrhtx.html