Tomcat配置优化手册
来源:互联网 发布:sql求和函数 编辑:程序博客网 时间:2024/06/06 01:38
Tomcat配置优化手册
一、环境变量检查
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"/>
启动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。
2、确认
登录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
其中红色属性值需要根据具体资源来计算和配置。为避免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标签页,JavaOptions增加如下配置:
-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
如果加入了-Xms、-Xmx、-Xss这三个参数,下面的内存池初始值和最大值以及堆栈大小就不要填写,如果没加入这三个参数就在界面上填写对应的参数。
3. 验证
jmap –heap pid检查内存分配情况:
jinfo –flags pid检查参数配置情况:
通过jvisualvm.exe检查启动参数:
- Tomcat配置优化手册
- Tomcat和JVM配置优化手册
- tomcat配置手册
- [MyEclipse手册]配置tomcat
- Tomcat的详细配置手册
- Tomcat的详细配置手册
- Tomcat的详细配置手册
- Tomcat的详细配置手册
- Tomcat的详细配置手册
- Nginx + tomcat + SSL 安装配置手册安装配置手册安装配置手册安装配置手册
- tomcat 的优化配置
- Tomcat配置优化A
- TOMCAT 优化配置
- Tomcat配置优化
- Tomcat配置优化
- tomcat 的优化配置
- Tomcat优化配置
- Tomcat优化配置
- 红黑树
- 七大查找算法
- HRBUST1315 火影忍者之~大战之后
- 系统语言文件操作实现两个文档内容的复制
- 最小费用最大流算法
- Tomcat配置优化手册
- 表
- 向TREE—INSERT的一个递归版本致敬
- Python格式化输出
- Linux 64位下Oracle 12C图文安装
- surfer10与Arcgis10.3 完美生成等值线和等值面方法
- Anniversary party POJ
- Java定时器timer.schedule的一些问题
- Vue相关开源项目库汇总