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)
- 接受器接受套接字
- 接收器从缓存中检索nioChannel对象
- Pollerthread将nioChannel注册到它的选择器IO事件
- 轮询器将nioChannel分配给一个work线程来处理请求
-
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专业中间件,可以限流并记录日志等
网友评论