tomcat/bin/catalina.sh 对比
-
内存参数
1.vpc环境:
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms2g -Xmx6g -XX:NewSize=1g -XX:MaxNewSize=2g -XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=1g"
2.中小环境
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx5624m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=788m -XX:MaxPermSize=788m " -
vpc权限配置
hpux=false
HP-UX*) hpux=true;
Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。
年轻代(New):年轻代用来存放JVM刚分配的Java对象(堆内存)
年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代
永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。
(1)针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
(2)年轻代和年老代将根据默认的比例(1:2)分配堆内存,可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代,比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小
tomcat访问链接配置
- 中小环境:http(阻塞)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="30000" maxThreads="1500"
minProcessors="20" maxProcessors="1024"
acceptCount="2000" enableLookups="false"
redirectPort="8443" URIEncoding="UTF-8" /> - vpc环境配置:pool(不稳定)
<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="1500"
minSpareThreads="30"
maxIdleTime="60000"
prestartminSpareThreads = "true"
maxQueueSize = "2000"
/>
<Connector
executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="30000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="100"
maxPostSize="10485760"
maxHttpHeaderSize="8192"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2"
compressableMimeType="text/html,text/plain,text/css,application/javascript,appli
cation/json,application/x-font-ttf,application/x-fontotf,
image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
URIEncoding="utf-8"
processorCache="20000"
TcpNoDelay="true"
connectionLinger="5"
server="StrongSvr"
/>
maxThreads:Tomcat可创建的最大的线程数,每一个线程处理一个请求;
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
maxPostSize="10485760" :http的post请求body的大小 默认maxPostSize=“2097152”
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数;
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程;
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。)
maxHttpHeaderSize="8192" - http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding - 指定Tomcat容器的URL编码格式。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
tomcat的并发决定因素
maxThreads:Tomcat线程池最多能起的线程数;
maxConnections:Tomcat最多能并发处理的请求(连接);
acceptCount:Tomcat维护最大的对列数;
minSpareThreads:Tomcat初始化的线程池大小或者说Tomcat线程池最少会有这么多线程。
比较容易弄混的是maxThreads和maxConnections这两个参数:maxThreads是指Tomcat线程池最多能起的线程数,而maxConnections则是Tomcat一瞬间做多能够处理的并发连接数。比如maxThreads=1000,maxConnections=800,假设某一瞬间的并发时1000,那么最终Tomcat的线程数将会是800,即同时处理800个请求,剩余200进入队列“排队”,如果acceptCount=100,那么有100个请求会被拒掉。
注意:根据前面所说,只是并发那一瞬间Tomcat会起800个线程处理请求,但是稳定后,某一瞬间可能只有很少的线程处于RUNNABLE状态,大部分线程是TIMED_WAITING,如果你的应用处理时间够快的话。所以真正决定Tomcat最大可能达到的线程数是maxConnections这个参数和并发数,当并发数超过这个参数则请求会排队,这时响应的快慢就看你的程序性能了。
日志打印
-
vpc日志格式
pattern="%h %l %u %t "%r" %s %b" -
中小环境日志格式
pattern="%h %l %u %t "%r" %s %b %D"
%h - 远程主机名 %I (大写的i) - 当前请求的线程名称 %U - 请求的URL路径 %t - 日期和时间,在通用日志格式"
%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名
%H - 请求协议
%L(小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
%m - 请求方法
%p - 本地端口
%q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
%r - 第一行的要求
%s - 响应的HTTP状态代码
%S - 用户会话ID
%t - 日期和时间,在通用日志格式
%u - 远程用户身份验证
%U - 请求的URL路径
%v - 本地服务器名
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
%I (大写的i) - 当前请求的线程名称
engine的配置
- vpc环境
<Engine name="Catalina" defaultHost="localhost">
中小环境
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
nginx负载均衡分发地址中cookie,session问题
jvm_route是通过session_cookie这种方式来实现session粘性,将特定会话附属到特定tomcat上,从而解决session不同步问题,但无法解决宕机后会话转移问题。
tomcat/conf/web.xml差别
- vpc环境
<mime-mapping>
<extension>ttc</extension>
<mime-type>font/collection</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ttf</extension>
<mime-type>font/ttf</mime-type>
</mime-mapping> - 中小环境
<mime-mapping>
<extension>ttc</extension>
<mime-type>application/x-font-ttf</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ttf</extension>
<mime-type>application/x-font-ttf</mime-type>
</mime-mapping>
过滤文件,暂时不知到原因
网友评论