介绍:
Tomcat的三种请求接收模式:
1、BIO:阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本默认情况下是以bio 模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。
2、NIO:java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行比较简单,只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
修改为:(注:Tomcat8以上版本默认为NIO模式,无需修改)
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
3、APR :是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。
开启Tomcat APR运行模式:
1、安装所需依赖包:
yum -y install apr-devel openssl-devel gcc make
2、安装APR动态库:
进入tomcat的bin目录,解压tomcat-native.tar.gz文件,并进入tomcat-native-src/native目录,执行./configure && make && make install 命令,动态库默认安装在/usr/local/apr/lib目录下
3、配置APR本地库到系统共享库搜索路径中:
编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
附:
1、Tomcat的目录层次结构:
bin: 存放启动和关闭Tomcat的脚本文件
conf: 存放Tomcat服务器的各种配置文件
lib: 存放tomcat服务器支撑的jar包
logs: 存放Tomcat的日志文件
temp: 存放Tomcat运行时产生的临时文件
webapps:web应用虽在目录,即供外界访问的web资源的存放目录
2、Javaweb应用的组成结构:
mail—————————————-Web应用所在目录
|——html、jsp、css、js等文件,根目录下的文件外界可以直接访问
|——WEB-INF目录
|————-classes目录(java类)
|————-lib目录(java类运行所需的jar包)
|————-web.xml(web应用的配置文件)
WEB-INF 这个目录下的文件外界无法直接访问,由web服务器负责调用
3、Tomcat的组成结构:
Tomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。每个组件都可以在Tomcat安装目录/conf/server.xml文件中进行配置,每个Tomcat组件在server.xml文件中对应一种配置元素。下面用XML的形式展示各种Tomcat组件之间的关系
<Server>代表整个Servlet容器组件,是最顶层元素,可以包含一个或多个<Service>元素
<Service>包含一个<Engine>元素以及一个或多个<Connector>元素,这些<Connector>共享一个<Engine>
<Connector/>代表和客户程序实际交互的组件,负责接收客户请求,以及向客户返回响应
<Engine>每个<Service>元素只能包含一个<Engine>元素,它处理在同一个<Service>中所有<Connector>接收到的客户请求
<Host>在一个<Engine>中可以包含多个<Host>,它代表一个虚拟主机(即一个服务器程序可以部署在多个有不同IP的服务器主机上),它可以包含一个或多个应用
<Context>使用最频繁的元素,代表了运行在虚拟主机上的单个web应用
</Host>
</Engine>
</Service>
</Server>
4、Tomcat内存使用配置优化:
Tomcat是依赖于JVM的,所以Tomcat的使用内存配置实质上是JVM的内存配置
在/bin目录下的catalina.bat可以直接通过Tomcat设置JVM内存参数,windows下
打开catalina.bat文件,在大概中间的位置,找到
set “JAVA_OPTS=%JAVA_OPT% -server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true”
通过内存设置充分利用服务器内存
-server: 模式启动应用慢,但是极大程度提高运行性能
-Xms2048m -Xmx2048m: 设置的是堆内存
java8开始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,不会再有java.lang.OutOfMemoryError:PermGen space,可以不设置
Headless=true: 适用于Linux系统,与图形操作有关,如生成验证码含义是当前的是无显示器的服务器,应用中如果获取系统显示有关的参数会抛出异常,windows系统可不用设置
可通过jmap -heap process_id查看设置是否成功
5、最大连接数的配置优化:
在/conf/server.xml里进行配置
在
将protocol属性改为 “org.apache.coyote.http11.Http11NioProtocol”,NIO模型的效率更高
加入
maxThreads=”500” //当前可以同时处理的最大用户访问数
minSpareThreads=”100” //最小空闲线程连接数,用于优化线程池
maxSpareThreads=”200”
acceptCount=”200” //当所有的线程以分配,仍然允许连接进来,但是出于等待状态的用户数。等待线程数+工作线程数=总的可最大连接数,如果超过此数,新的连接将不会被接受,就会产生一个http错误
enableLookups=”false”//是否允许DNS反查,如果为true,request.getRemoteHost会执行DNS查找,反向解析ip对应域名或主机名,当没有这样需要的时候,可以将这个功能关闭,在一定程度上提高了Tomcat服务器的性能
