1. 相关端口、编码、NIOConnector配置
编辑tomcat下的Server.xml 文件,原内容如下
<Connector port="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
1) http访问端口修改,假设我们目前需要的端口为80: 8080------》80
<Connectorport="80"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
2) NIOConnector 连接配置,采用NIO连接器是为了使用NIO的多路复用功能,提高tomcat的吞吐与并发能力。
<Connectorport="80" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
3) Tomcat 编码设置
<Connectorport="80" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"URIEncoding=”utf-8” />
2. 虚拟路径配置,虚拟路径的作用是:如果要求我们的软件能够直接通过IP以及端口就能访问,则需要此配置。
编辑Server.xml 在<Host>标签下添加如下内容
<Context path=" " docBase="D:\myproject\webapp" reloadable="true" debug="0" crossContext="true" ></Context>
path:指定访问该 Web 应用的 URL 入口。
docBase:指定 Web 应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase 属性的相对路径,如果 Web 应用采用开放目录结构,则指定 Web应用的根目录,如果 Web 应用是个 war 文件,则指定 war 文件的路径。(指定项目所在地址)
reloadable:如果这个属性设为 true,tomcat 服务器在运行状态下会监视在WEB-INF/classes 和 WEB-INF/lib 目录下 class 文件的改动,如果监测到有 class 文件被更新的,服务器会自动重新加载 Web 应用。
crossContext:如果想在应用内调用 ServletContext.getContext()来返回在该虚拟主机上运行的其他 web application 的 request dispatcher,设为 true。在安全性很重要的环境中设为 false,使得 getContext()总是返回 null。缺省值为 false。
Debug:与这个 Engine 关联的 Logger 记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为 0。
这个方法一般在设置后都需要重启服务器才有效(有时候即使设置了reloadable=“true” 也需要重新启动)
3. Jvm参数相关配置
在Catalina.sh 文件中添加如下参数,红色字体代表为需要动态调整的参 数,配置以64为JDK为例。
JAVA_OPTS="-XX:+UseCMSCompactAtFullCollection -Xms3536m -Xmx3536m -Xmn2g -XX:TargetSurvivorRatio=90 -XX:PermSize=512m
-XX:MaxPermSize=512m -Xverify:none -XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=80 -XX:+HeapDumpOnOutOfMemoryError
XX:HeapDumpPath=/gc/dump/ heap.hprof-XX:+DisableExplicitGC
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:MaxTenuringThreshold=25 -Xloggc:/gc/gc.log"
-Xms3536m最小堆内存大小,建议大约占整个内存的70%左右
-Xmx3536m最大堆内存大小,建议大约占整个内存的70%左右,建议与最小堆内存一直,尽量防止发生不必要的内存回收。
-Xmn2g 新生代内存大小,建议为整个堆内存的80%左右
-XX:PermSize=512m 最小永久代的大小,这个要根据项目的规模来,如果项目规模大,可以做出与之适应的调整,通过JConsole工具监测项目所需要的永久带大小。
-XX:MaxPermSize=512m最大永久代的大小,这个要根据项目的规模来,如果项目规模大,可以做出与之适应的调整,通过JConsole工具监测项目所需要的永久带大小。
-XX:HeapDumpPath=/gc/dump/heap.hprof 当出现内存溢出时,打印出来的堆信息。
-Xloggc:/gc/gc.log 垃圾回收的日志所在的路径,通过此文件便于排查系统隐藏、性能问题。
4. 线程池配置
目的:配置合理的线程数,增加系统的吞吐量以及并发能力,防止线程数太多造成服务器压力太大,合理利用服务器硬件资源。
编辑Server.xml
1) 增加线程池Executor配置
<Executorname="tomcatThreadPool"namePrefix="catalina-exec-"maxThreads="200 " minSpareThreads="4"maxSpareThreads="200" acceptCount="200" maxIdleTime="30000" enableLookups="false"/>
maxThreads:最大能接受的请求数,默认为200
minSpareThreads:最少备用线程数,默认初始化,默认为25 maxSpareThreads:最多备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
acceptCount:等待处理的请求队列,默认为100,超过队列长度,服务器则拒绝客户端请求,直接返回403
maxIdleTime:如果一个线程在30秒以内没有活跃,则终止运行并从线程池中移除。除非线程池数量小于或等于minSpareThreads数量。默认值是1分钟
enableLookups:如果为true,调用request.getRemoteHost会执行DNS反查,反向解析IP对应的域名或主机,效率较低,建议设为false。
2)修改httpConnector 相关配置
<Connectorport="80" executor="tomcatThreadPool"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" URIEncoding=”utf-8” />