介绍:

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文件中将如下配置:

  1. <Connector port="8080" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. 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资源的存放目录

work: Tomcat的工作目录

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服务器的性能