Tomcat配置优化手册
2017-03-06 16:12
169 查看
Tomcat配置优化手册
一、环境变量检查
JAVA_HOME:
在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径。
CLASSPATH:
在系统变量里点击新建变量名填写CLASSPATH,变量值填写
“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”
注意不要忘记前面的点和中间的分号。
Path:
在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上
“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”
注意前面的分号。
验证方式
在cmd中输入Java –verion后能输出正确的JDK版本号信息:
打开命令窗口,检查以下命令的输出:
CATALINA_BASE:
在系统变量里点击新建,变量名填写CATALINA_BASE,变量值填写TOMCAT的安装根路径。
CATALINA_HOME:
在系统变量里点击新建,变量名填写CATALINA_HOME,变量值填写TOMCAT的安装家路径。
Path:
在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上
“%CATALINA_HOME%\lib;%CATALINA_HOME%\bin”
注意前面的分号。
验证方式
打开命令窗口,检查以下命令的输出。
二、配置TOMCAT用户
优化配置之前,需要配置一个Tomcat管理员账户,来登录Tomcat控制台查看各种参数。
在%CATALINA_HOME%/conf/tomcat-users.xml下添加用户:
启动tomcat后,登录Tomcat控制台查看信息,URL: http://serverip:port/
1、运行模式
TomcatConnector的三种不同的运行模式性能相差很大,这三种模式的不同之处如下:
BIO:
一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。
NIO:
利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。
APR:
即Apache Portable Runtime,从操作系统层面解决io阻塞问题。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
1、Executor参数
name:
共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;
namePrefix:
在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
maxThreads:
该线程池可以容纳的最大线程数。默认值:200;
minSpareThreads:
Tomcat应该始终打开的最小不活跃线程数。默认值:25。
prestartminSpareThreads:
是否在Executor启动时,就生成minSpareThreads个线程。默认为 false。
2. 开启线程池
修改%CATALINA_HOME%/conf/
server.xml,开启线程池:
将Executor参数改成:
表示使用该参数值对应的线程池;
enableLookups:
maxPostSize:
以POST方式传输的参数长度限制,默认为2M;
URIEncoding:
Tomcat在解析参数的时候使用的编码方式,默认不支持中文;
acceptCount:
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
acceptorThreadCount:
Tomcat接收请求的线程的数目,默认是1个;
2、配置连接器
修改%CATALINA_HOME%/conf/server.xml,将Connector的执行器设置为共享池模式:
具体如下:
3、 验证
登录Tomcat控制台,验证配置是否生效:
1. 压缩参数
HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML ,CSS,JavaScript
, Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩。
compression:
是否启动压缩功能;
compressionMinSize:
noCompressionUserAgents:
哪些类型的浏览器不启用压缩;
compressableMimeType:
2. 开启压缩
在%CATALINA_HOME%/conf/ server.xml下
具体如下:
1. 格式参数
通过配置日志记录的格式,取得访问日志数据,为后续的性能优化提供依据,也能为一些故障定位提供帮助:
2. 配置优化
在%CATALINA_HOME%/conf/ server.xml中,修改Server->Service->Engine->Host下的Valve元素:
3、验证
在%CATALINA_HOME%/logs/下查看最新生成的日志的格式:
后续可以使用工具根据以上日志信息生成多个报表:
* 独立IP数统计
* 访问请求数统计
* 访问资料文件数统计
* 访问流量统计
* 访问处理响应时间统计
* 统计所有404错误页面
* 统计所有500错误的页面
* 统计访问最频繁页面
* 统计访问处理时间最久页面
* 统计并发访问频率最高的页面
在%CATALINA_HOME%/conf/ server.xml中,Host修改如下:
1、JVM参数
JVM参数可分为通用参数、并行收集器参数、CMS参数等,具体如下:
2. 配置优化
在%CATALINA_HOME%/bin/ 下,创建文件setenv.bat,文件内容如下:
其中红色属性值需要根据具体资源来计算和配置。为避免promontion faild报错,个别属性的值需要计算得出,因为eden+fromsurvivor < old gen区剩余内存时,不会出现promontion faild的情况,所以可依据以下公式来计算CMSInitiatingOccupancyFraction的值:
CMSInitiatingOccupancyFraction计算公式
CMSInitiatingOccupancyFraction<=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100
例如:
当xmx=3000xmn=600 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((3000.0-600)-(600-600/(1+2)))/(3000-600)*100=83.33
当xmx=5000xmn=900 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((5000.0-900)-(900-900/(1+2)))/(5000-900)*100=85.3659
另外,如果Tomcat是安装成service方式,除了需要增加setenv.bat文件外,还需要配置%CATALINA_HOME%/bin/目录下的tomcat7w.exe,双击打开,切换到JAVA标签页,Java
Options增加如下配置:
如果加入了-Xms、-Xmx、-Xss这三个参数,下面的内存池初始值和最大值以及堆栈大小就不要填写,如果没加入这三个参数就在界面上填写对应的参数。
3. 验证
jmap –heap pid检查内存分配情况:
jinfo –flags pid检查参数配置情况:
通过jvisualvm.exe检查启动参数:
一、环境变量检查
1、JDK环境变量
配置好JDK环境变量JAVA_HOME:
在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径。
CLASSPATH:
在系统变量里点击新建变量名填写CLASSPATH,变量值填写
“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”
注意不要忘记前面的点和中间的分号。
Path:
在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上
“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”
注意前面的分号。
验证方式
在cmd中输入Java –verion后能输出正确的JDK版本号信息:
打开命令窗口,检查以下命令的输出:
JAVA_HOME | echo %JAVA_HOME% |
CLASSPATH | echo %CLASSPATH% |
Path | echo %Path% |
2、Tomcat环境变量
配置好Tomcat环境变量CATALINA_BASE:
在系统变量里点击新建,变量名填写CATALINA_BASE,变量值填写TOMCAT的安装根路径。
CATALINA_HOME:
在系统变量里点击新建,变量名填写CATALINA_HOME,变量值填写TOMCAT的安装家路径。
Path:
在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上
“%CATALINA_HOME%\lib;%CATALINA_HOME%\bin”
注意前面的分号。
验证方式
打开命令窗口,检查以下命令的输出。
CATALINA_BASE | echo %CATALINA_BASE% |
CATALINA_HOME | echo %CATALINA_HOME% |
Path | echo %Path% |
二、配置TOMCAT用户
优化配置之前,需要配置一个Tomcat管理员账户,来登录Tomcat控制台查看各种参数。在%CATALINA_HOME%/conf/tomcat-users.xml下添加用户:
<role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/> |
三、运行模式确认
1、运行模式
TomcatConnector的三种不同的运行模式性能相差很大,这三种模式的不同之处如下:BIO:
一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。
NIO:
利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。
APR:
即Apache Portable Runtime,从操作系统层面解决io阻塞问题。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
2、确认
fb49
登录Tomcat控制台,确认运行模式为APR:
四、执行器优化
1、Executor参数
name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;
namePrefix:
在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
maxThreads:
该线程池可以容纳的最大线程数。默认值:200;
minSpareThreads:
Tomcat应该始终打开的最小不活跃线程数。默认值:25。
prestartminSpareThreads:
是否在Executor启动时,就生成minSpareThreads个线程。默认为 false。
2. 开启线程池
修改%CATALINA_HOME%/conf/server.xml,开启线程池:
将Executor参数改成:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="800" minSpareThreads="100" prestartminSpareThreads="true"/> |
五、连接器优化
1、Connector参数
executor:表示使用该参数值对应的线程池;
enableLookups:
是否反查域名,取值为true 或 false 。为了提高处理能力,应设置为 false;
maxPostSize:
以POST方式传输的参数长度限制,默认为2M;
URIEncoding:
Tomcat在解析参数的时候使用的编码方式,默认不支持中文;
acceptCount:
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
acceptorThreadCount:
Tomcat接收请求的线程的数目,默认是1个;
2、配置连接器
修改%CATALINA_HOME%/conf/server.xml,将Connector的执行器设置为共享池模式:具体如下:
<Connector executor="tomcatThreadPool" port="8080" connectionTimeout="20000" protocol="HTTP/1.1" redirectPort="8443" enableLookups="false" maxPostSize="10485760" URIEncoding="utf-8" acceptCount="800" acceptorThreadCount="2"/> |
3、 验证
登录Tomcat控制台,验证配置是否生效:六、开启压缩功能
1. 压缩参数
HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML ,CSS,JavaScript, Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩。
compression:
是否启动压缩功能;
compressionMinSize:
当数据大于多少KB的时候使用压缩;
noCompressionUserAgents:
哪些类型的浏览器不启用压缩;
compressableMimeType:
需要压缩的文件类型;
2. 开启压缩
在%CATALINA_HOME%/conf/ server.xml下具体如下:
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" enableLookups="false" maxPostSize="10485760" URIEncoding="utf-8" acceptCount="800" acceptorThreadCount="2" compression="on" compressionMinSize="50" noCompressionUserAgents="" compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/javascript,text/css,text/plain"/> |
七、 日志配置
1. 格式参数
通过配置日志记录的格式,取得访问日志数据,为后续的性能优化提供依据,也能为一些故障定位提供帮助: %a | 记录访问者的IP |
%A | 记录本地服务器的IP |
%b | 发送的字节数,不包括http头,如果字节数为0的话,显示为- |
%h | 服务器名称,如果resolveHosts为false的话,就是IP地址 |
%H | 访问者使用的协议 |
%l | 访问逻辑用户名,通常返回'-' |
%m | 访问的方法 |
%q | querystring |
%r | 请求首行 |
%s | http的状态 |
%S | 用户的session ID |
%t | 访问时间 |
%u | 验证的访问者,否则就是"-" |
%U | 访问的URL地址 |
%D | 访问发生的时间,以毫秒记 |
%T | 访问发生的时间,以秒记 |
2. 配置优化
在%CATALINA_HOME%/conf/ server.xml中,修改Server->Service->Engine->Host下的Valve元素:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%t %a %A %h %H %S %l %u %m %U "%r" "%q" %s %b %D %T" /> |
3、验证
在%CATALINA_HOME%/logs/下查看最新生成的日志的格式:后续可以使用工具根据以上日志信息生成多个报表:
* 独立IP数统计
* 访问请求数统计
* 访问资料文件数统计
* 访问流量统计
* 访问处理响应时间统计
* 统计所有404错误页面
* 统计所有500错误的页面
* 统计访问最频繁页面
* 统计访问处理时间最久页面
* 统计并发访问频率最高的页面
八、 安全性配置
1. 应用程序安全
关闭war自动部署unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序。在%CATALINA_HOME%/conf/ server.xml中,Host修改如下:
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false"> |
九、JVM配置优化
1、JVM参数
JVM参数可分为通用参数、并行收集器参数、CMS参数等,具体如下:参数名称 | 含义 | 默认值 | 备注 |
-Xms | 初始堆大小 | 物理内存的1/64(<1GB) | 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. |
-Xmx | 最大堆大小 | 物理内存的1/4(<1GB) | 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 |
-Xmn | 年轻代大小 | | 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 |
-XX:PermSize | 设置持久代初始值 | 物理内存的1/64 | |
-XX:MaxPermSize | 设置持久代最大值 | 物理内存的1/4 | |
-Xss | 每个线程的堆栈大小 | | JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K. |
-XX:+DisableExplicitGC | 禁用System.gc() | | |
-XX:SurvivorRatio | Eden区与Survivor区的大小比值 | | 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 |
-XX:+UseConcMarkSweepGC | 使用CMS内存收集 | | |
-XX:+UseParNewGC | 设置年轻代为并行收集 | | 可与CMS收集同时使用 |
-XX:+CMSParallelRemarkEnabled | 降低标记停顿 | | |
-XX+UseCMSCompactAtFullCollection | 在FULL GC的时候, 对年老代的压缩 | | CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 可能会影响性能,但是可以消除碎片 |
-XX:CMSFullGCsBeforeCompaction | 多少次后进行内存压缩 | | 由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理. |
-XX:+CMSClassUnloadingEnabled | 开启对永久代进行垃圾回收 | CMS收集器默认不会对永久代进行垃圾回收。 | |
-XX:LargePageSizeInBytes | 内存页的大小不可设置过大, 会影响Perm的大小 | | |
-XX:+UseFastAccessorMethods | 原始类型的快速优化 | | |
-XX:+UseCMSInitiatingOccupancyOnly | 使用手动定义初始化定义开始CMS收集 | | 禁止hostspot自行触发CMS GC |
-XX:CMSInitiatingOccupancyFraction=70 | 使用cms作为垃圾回收 使用70%后开始CMS收集 | 92 | 为了保证不出现promotion failed(见下面介绍)错误,该值的设置需要满足以下公式CMSInitiatingOccupancyFraction计算公式 |
-XX:SoftRefLRUPolicyMSPerMB | 每兆堆空闲空间中SoftReference的存活时间 | 1s | |
-XX:+PrintClassHistogram | | | garbage collects before printing the histogram |
-XX:+PrintGCDetails | 打印日志细节 | | |
-XX:+PrintGCTimeStamps | 打印时间 | | |
-XX:+PrintHeapAtGC | 打印GC前后的详细堆栈信息 | | |
-XX:+PrintGCApplicationStoppedTime | 打印垃圾回收期间程序暂停的时间 | | |
-Xloggc:d:\gc.log | 把相关日志信息记录到文件以便分析 | | |
2. 配置优化
在%CATALINA_HOME%/bin/ 下,创建文件setenv.bat,文件内容如下:set JAVA_OPTS=%JAVA_OPTS% -server –Xms3000M –Xmx3000M –Xmn600M -XX:PermSize=512M -XX:MaxPermSize=512M -Xss256K set JAVA_OPTS=%JAVA_OPTS% -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC set JAVA_OPTS=%JAVA_OPTS% -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=83 -XX:SoftRefLRUPolicyMSPerMB=0 set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:d:\gc.log |
CMSInitiatingOccupancyFraction计算公式
CMSInitiatingOccupancyFraction<=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100
例如:
当xmx=3000xmn=600 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((3000.0-600)-(600-600/(1+2)))/(3000-600)*100=83.33
当xmx=5000xmn=900 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((5000.0-900)-(900-900/(1+2)))/(5000-900)*100=85.3659
另外,如果Tomcat是安装成service方式,除了需要增加setenv.bat文件外,还需要配置%CATALINA_HOME%/bin/目录下的tomcat7w.exe,双击打开,切换到JAVA标签页,Java
Options增加如下配置:
-Xms3000M -Xmx3000M -Xmn600M -XX:PermSize=512M -XX:MaxPermSize=512M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=83 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:d:\gc.log |
3. 验证
jmap –heap pid检查内存分配情况:jinfo –flags pid检查参数配置情况:
通过jvisualvm.exe检查启动参数:
相关文章推荐
- Apache与Tomcat安装配置手册
- 基于Tomcat+Oracle的应用程序安装配置手册(ZT)
- 基于Tomcat+Oracle的应用程序安装配置手册
- Tomcat 常用优化和配置
- 【转】 在linux环境下部署tomcat应用+配置优化
- tomcat配置手册
- Tomcat配置优化
- 关于TOMCAT的优化配置设置
- tomcat 的优化配置
- Tomcat配置优化A
- tomcat配置手册(server.xml)——中文版
- Apache与Tomcat安装配置手册
- Tomcat 5常用优化和配置
- Tomcat 5常用优化和配置
- Tomcat的详细配置手册
- apache+tomcat+jk+php配置手册
- Tomcat5.5.x配置手册
- Apache与Tomcat安装配置手册
- tomcat5.5的配置、性能优化
- Tomcat 常用优化配置 (一)【转】