Tomcat Connector运行模式

news2025/1/20 13:28:54

目录

1 Tomcat Connector运行模式

1.1  BIO 模式

1.2 NIO 模式

1.3 APR模式

2 修改Tomcat Connector运行模式为apr 或者解决问题The APR not found 问题

2.1 linux系统

2.2 windows处理


 

1 Tomcat Connector运行模式

1.1  BIO 模式

BIO模式(blocking I/O):指阻塞式I/O操作,Tomcat在默认情况下是以bio模式运行的。

简明来说就是:每个客户端连接过来的,服务器都会启动一个线程来处理客户端的请求。

BIO模式的缺点:

当客户端较多时,会创建大量的处理线程,每个线程都会占用栈空间和一些cpu时间。

阻塞可能带来频繁的上下文切换,而大部分的上下文切换时无意义的。

总结一句话:并发量高时,线程数较多,浪费资源。

Tomcat7及其以下,在Linux系统中默认使用这种模式。

1.2 NIO 模式

nio模式(non-blocaking I/O):指非阻塞I/O操作,nio是一个基于缓冲区并能提供非阻塞I/O操作的JavaAPI,它拥有比bio更好的并发运行性能,想要Tomcat以nio模式运行我们需要修改server.xml文件。

Nio模式工作原理:

1.由一个专门的线程来处理所有的 I/O 事件、并负责分发。

2.事件驱动机制,而不再同步地去监视事件。

3.线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的,减少无谓的线程切换。

比较高深,纯属技术用语:

NIO采用了双向通道(channel)进行数据传输,而不是单向的流(stream)。在通道上我们可以注册指定的事件,一共有以下四种事件:

1.服务端接收客户端连接事件OP_ACCEPT(16)

2.客户端连接服务端事件 OP_CONNECT(8)

3.读事件 OP_READ(1)

4.写事件 OP_WRITE(4)

服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道上的事件。以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,BIO这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达则处理这些事件;如果没有感兴趣的事件到达则处理线程会一直阻塞,直到感兴趣的事件到达为止。

1.3 APR模式

apr(Apache portable Run-time libraries/Apache可移植运行库)是Apache HTTP服务器的支持库。在apr模式下,Tomcat将以JNI(Java Native Interface)的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大提高Tomcat对静态文件的处理性能。Tomcat apr是在Tomcat上运行高并发应用的首选模式。

而要让Tomcat以apr模式运行,

对于Tomcat 7.0.30开始向后的版本,只需要再次修改protocol为”org.apache.coyote.http11.Http11AprProtocol”即可。

对于Tomcat 7.0.30之前的版本,还需要以下三个组件的支持:

1.APR library[APR库]

2.JNI wrappers for APR used by Tomcat (libtcnative)[Windows操作系统上一个名为tcnative-1.dll的动态链接库文件]

3.OpenSSL libraries[OpenSSL库]

2 修改Tomcat Connector运行模式为apr 或者解决问题The APR not found 问题

2.1 linux系统

问题:

Spring Boot 报错The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on  linux

安装包下载地址

前提:已经安装jdk

1.安装apr

[root]# tar -zxvf apr-1.7.0.tar.gz

[root]# cd apr-1.7.0

[roo]# ./configure --prefix=/usr/local/apr

[root]# make

[root]# make install

2.安装 tar -zxvf tomcat-native-1.2.26-src.tar.gz

[root]# tar -xzvf tar -zxvf tomcat-native-1.2.26-src.tar.gz

[root]# cd tomcat-native-1.2.26-src/native

[root]# ./configure --with-apr=/usr/local/apr

[root]# make

[root]# make install

3将编译的/usr/local/apr/lib 文件全部放到新服务器/usr/lib下即可。库文件是存在软链接的,可以手动创建,也可以不做。

2.2 windows处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C语言]运用函数指针数组构建一个简单计算器

1.函数指针数组 函数指针数组,即为存放函数首地址的数组,类型为函数指针类型。 2.运用函数指针数组构建简单计算器 1.人机交互,首先要用选择加减或乘除的菜单,再分别写出其功能 void menu() {printf("****************…

嵌入式实时操作系统的设计与开发(五)

线程退出 当线程代码执行完后,系统会隐式地调用acoral_thread_exit()函数进行线程退出相关的操作。 acoral_thread_exit()本质上是要执行acoral_kill_thread()。 void acoral_thread_exit(){acoral_kill_thread(acoral_cur_thread); }void acoral_kill_thread(aco…

ccbill 代码分析

ccbill目录概述需求:设计思路实现思路分析1.BillState2.DBList3.DBListAttr4.DBListDBSrc5.DBListDBSrcsDBListsSurvive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wai…

每日一题:Leetcode59. 螺旋矩阵 II

文章目录 系列:数组专练 语言:java & go 题目来源:Leetcode59. 螺旋矩阵 II 难度:中等 考点:边界问题的处理 & 圈数处理 思路和参考答案文章目录题目描述思路java解法:java参考代码go参考代码&…

OceanBase 4.0解读:从TPC-H性能测评看4.0与3.x差异

关于作者 肖帆 OceanBase技术专家 OceanBase技术专家,开源生态团队成员。毕业于华中科技大学软件工程专业,从事数据库领域的质量保障工作,曾就职于有赞、网易,参与关系型数据库、缓存数据库、对象存储相关产品的测试开发&#x…

.net core api调用webserver接口(详细)

这里废话不多说,我就不简述什么事webserver了,相信点进本博客的大佬都是为了解决问题。 .net core 调用webserver的话还挺简单。首先我们先有个.net core api的项目。 1.我们先注入这个HttpClient 这个内置对象,一会要用到。 // 注入HttpC…

Vue Hook Event 解读

前言 Hook Event (钩子事件)相信很多 Vue 开发者都没有使用过,甚至没听过,毕竟 Vue 官方文档中也没有提及。 Vue 提供了一些生命周期钩子函数,供开发者在特定的逻辑点添加额外的处理逻辑,比如: 在组件挂载阶段提供了beforeMount 和…

代码随想录day34

1005. K 次取反后最大化的数组和 题目 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数…

linux笔记(9):MangoPi-MQ(芒果派麻雀D1s)Tina系统编译烧录

文章目录1.下载相关资料1.1 WhyCan Forum(哇酷开发者社区)提供的sdk1.1.1 SDK解压过程1.2 WhyCan Forum(哇酷开发者社区)提供的补丁1.2.1 补丁包含的文件1.2.2 补丁文件和D1下面的相同文件进行合并1.2.3 引脚PD17被复用,导致LCD变暗,修改设备树2. 编译ti…

【node.js 安装】linux下安装node.js

下面我们介绍安装包安装方法 nodejs官网下载地址1 nodejs官网下载地址2 我们以官网下载地址2打开 直接下载源代码,rz上传到/opt/tools/ 目录下 tar -xJvf node-v18.13.0-linux-x64.tar.xz配置环境变量,vim /etc/profile ,配置内容如下&am…

SFP 收发器居然有那么多种?值得收藏学习

SFP 模块具有广泛的应用范围,可与大部分现代网络配合使用,大多数可以分为四大类:电缆类型、传输范围、传输速率、应用。 一、电缆类型 SFP 模块可以在光纤和铜线上工作,根据光纤的种类,SFP收发器可分为与单模光纤配合…

π122E60 5.0kVrms 200Mbps 双通道数字隔离器 兼容代替Si8622BT-IS

π122E60 5.0kVrms 200Mbps 双通道数字隔离器 兼容代替Si8622BT-IS 具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。 产品传输通道间彼此独立,可实现多种传输方向的配置,可实现 5.0kVrms 隔离耐压等级和 DC 到…

Loading 用户体验 - 加载时避免闪烁

🍓 前言 在切换详情页中有这么一个场景,点击上一条,会显示上一条的详情页,同理,点击下一条,会显示下一条的详情页。 伪代码如下所示: 我们定义了一个 switcher 模版, 用户点击上一…

TensorRT部署YOLOv5(03)-TensorRT介绍

TensorRT是本专栏中最重要的内容,绝大多数内容将围绕TensorRT来展开,本文对TensorRT进行一个基本的介绍,让不熟悉TensorRT的读者能够对TensorRT是什么,如何使用它有一个较为全面的认识 Nvidia TensorRT是一个用于Nvidia GPU上高性能机器学习推理的SDK,对开发者屏蔽了模型…

到底什么样的 REST 才是最佳 REST?

说起 REST API,小伙伴们多多少少都有听说过,但是如果让你详细介绍一下什么是 REST,估计会有很多人讲不出来,或者只讲出来其中一部分。 今天松哥就来和大家一起来聊一聊到底什么是 REST,顺便再来看下 Spring HATEOAS 的…

[算法与数据结构]——并查集

目录 1. 概论 定义: 主要构成: 作用: 2. 并查集的现实意义 故事引入: 数据结构的角度来看: 3. find( )函数的定义与实现 故事引入: 实现: 4. join( )函数的定义与实现 故事引入: 实现…

c++11 标准模板(STL)(std::forward_list)(三)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

Apollo本地快速部署

GitHub项目地址 Gitee项目地址 Apollo&#xff08;阿波罗&#xff09;是携程框架部门研发的分布式配置中心&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的权限、流程治理等特性&#xff0c;适…

【计算机网络-数据链路层】介质访问控制协议(MAC协议)

文章目录1 静态划分信道——信道划分 MAC 协议1.1 频分多路复用&#xff08;FDM&#xff09;——“并行”1.2 时分多路复用&#xff08;TDM&#xff09;——“并发”1.2.1 同步时分多路复用1.2.2 异步时分多路复用1.3 波分多路复用&#xff08;WDM&#xff09;1.4 码分多路复用…

数据结构进阶 AVL树

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍高阶数据结构:AVL树 AVL树AVL树的概念AVL树节点类的定义AVL树的插入AVL树的旋转左单旋右单旋左右双旋右左单旋AVL树的验证…