Tomcat支持BIO/NIO/APR三种运行模式 ,性能各色春秋!

Apr插件提高Tomcat性能
  Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术.

APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIX sockets)。这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。

00、模式比较

01、不同版本的默认类型

tomcat7.x- 默认bio、tomcat8.x+默认nio

注意:基本arp能应对高并发(内核层次解决阻塞IO),非阻塞IO,内存占用小相对高点。高并发也说明流量大

BIO:同步阻塞
  一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。
NIO:同步非阻塞
APR:异步非阻塞

02、不同版本模式的配置

 <!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port
-->
protocol
HTTP/1.0
HTTP/1.1
org.apache.coyote.http11.Http11Protocol - blocking Java connector
org.apache.coyote.http11.Http11NioProtocol - non blocking Java connector
org.apache.coyote.http11.Http11AprProtocol - the APR/native connector

03、运行模式的判别

判定运行方式
Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:
Starting ProtocolHandler ["http-bio-8080"]
Starting ProtocolHandler ["http-nio-8080"]
Starting ProtocolHandler ["http-apr-8080"]

04、安装apr支持库

install:
APR library
JNI wrappers for APR used by Tomcat (libtcnative)
OpenSSL libraries

Requirements:
APR 1.2+ development headers (libapr1-dev package)
OpenSSL 0.9.7+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)

http://apr.apache.org/download.cgi                                                 #APR

http://archive.apache.org/dist/tomcat/tomcat-connectors/native    #native

1、tomcat7.X演示 

http://tomcat.apache.org/tomcat-7.0-doc/apr.html

2、编译环境准备工作

yum install -y gcc gcc-c++ make openssl-devel 

3、编译安装apr
yum    install  -y    apr             #有的tomcat编译native需要高版本的apr+1.4.3,太低不行,就需要源码编译
./configure --prefix=/usr/local/apr
make && make install

tomcat-7.0.70/bin/
tomcat-native.tar.gz     --源码

编译

./configure --with-apr=/usr/local/apr/     --with-java-home=/servyou_domain/jdk1.7.0_79/   --disable-openssl-version-check  --with-ssl=yes
make && make install 

 注意:如果系统设置了jdk环境变量,就不需要制定JAVA_HOME,不对openssl版本限制,不需要加对openssl版本检查

05、apr的环境变量配置

1、配置到系统变量中

vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export  LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
source /etc/profile

2、配置APR本地库到系统共享库搜索路径中

拷贝/usr/local/apr/lib目录下所有动态库到/usr/lib或/lib系统共享库搜索目录下即可。
copy /usr/local/apr/lib/libtcnative* /usr/lib/

3、配置到catalina.sh脚本中

编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径

JAVA_OPTS="$JAVA_OPTS  -Djava.library.path=/usr/local/apr/lib"

关闭ssl,将SSLEngine的值从on改成off即可:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
Tomcat 6.x版本从6.0.32开始就默认支持apr
Tomcat 7.x版本从7.0.30开始就默认支持apr

06、tomcat配置修改

1、server.xml
<Connector port="8080"

protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="1000"

maxHttpHeaderSize="8192"

acceptCount="1000"

disableUploadTimeout="true"

connectionTimeout="20000"

redirectPort="8230" />

tomcat7.x-Connector参数

http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

http://tomcat.apache.org/tomcat-8.0-doc/config/http.html

tomcat--Connector参数解读
<Connector
port="80" //监听端口
protocol="HTTP/1.1" //协议
enableLookups="false" //禁止反向DNS查询客户端主机名
maxThreads="600" //最大线程数
minSpareThreads="100" //初始化创建的线程数
maxSpareThreads="500" //一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。在7.8取消了
acceptCount="700" //最大等待数
connectionTimeout="20000" //连接超时
redirectPort="8443" //重定向
/>

2、catalina.sh

export JAVA_HOME="/servyou_domain/jdk1.7.0_79"
export JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms2g -Xmx2g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -Djava.library.path=/usr/local/apr/lib"

下面的也是可以

CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib"

最新文章

  1. Livecoding.tv2.5发布,增加“用户搜索引擎”功能,方便用户找到匹配的程序员
  2. 跳到下个View
  3. python 自动生成C++代码 (代码生成器)
  4. opencv,关于物体检测
  5. samba和squid 安装
  6. 新Azure 服务仪表盘!
  7. smarty模版使用php标签,获取模版变量!
  8. [LeetCode]题解(python):020-Valid Parentheses
  9. MVC5 EF6 Bootstrap3 HtmlHelper
  10. hibernate、easyui、struts2整合
  11. Process &#39;command &#39;/usr/lib/jvm/jdk1.8.0_25/bin/java&#39;&#39; finished with non-zero exit value 2
  12. Adaline网络识别印刷体数字0到9-java实现
  13. probabilistic robotics_Kalman filter(一)
  14. Docker_快速部署jenkins
  15. Bate敏捷冲刺每日报告--day2
  16. 勾勾街:一个专业的苹果ios app 自助打包的网站,免越狱,免证书签名
  17. 软件测试2019:第四次作业—— 性能测试(含JMeter实验)
  18. AVAudioSesion和AVAudioPlayer的基本使用
  19. 剑指Offer 18. 二叉树的镜像 (二叉树)
  20. 【转发】Linq To EF添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题

热门文章

  1. Spring cloud微服务安全实战-7-8ELK+SpringBoot环境搭建
  2. 二进制和ASCII文件的区别
  3. 制作Visual Studio 2017 (VS 2017) 离线安装包 (转)
  4. [LeetCode] 676. Implement Magic Dictionary 实现神奇字典
  5. oracle 添加字段
  6. 【视频开发】【计算机视觉】doppia编译之四:安装其他库、编译和运行doppia
  7. 1、快速搭建后台list
  8. Pytorch1.3源码解析-第一篇
  9. [转帖]Windows 7寿终正寝 为何Windows 10屡被吐槽它却无比经典?
  10. Linux中buff/cache内存占用过高解决办法