2019-06-17

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(阻塞)
    connectionTimeout="30000" maxThreads="1500"
    minProcessors="20" maxProcessors="1024"
    acceptCount="2000" enableLookups="false"
    redirectPort="8443" URIEncoding="UTF-8" />
  • vpc环境配置:pool(不稳定)
    name="tomcatThreadPool"
    namePrefix="catalina-exec-"
    maxThreads="1500"
    minSpareThreads="30"
    maxIdleTime="60000"
    prestartminSpareThreads = "true"
    maxQueueSize = "2000"
    />
    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环境

    中小环境

    nginx负载均衡分发地址中cookie,session问题
    jvm_route是通过session_cookie这种方式来实现session粘性,将特定会话附属到特定tomcat上,从而解决session不同步问题,但无法解决宕机后会话转移问题。

tomcat/conf/web.xml差别

  • vpc环境

    ttc
    font/collection


    ttf
    font/ttf
  • 中小环境

    ttc
    application/x-font-ttf


    ttf
    application/x-font-ttf

    过滤文件,暂时不知到原因

你可能感兴趣的:(2019-06-17)