zoukankan      html  css  js  c++  java
  • nginx+keepalived+tomcat之tomcat性能调优

    nginx+keepalived+tomcat之tomcat性能调优

    tomcat容器调优

    vim $CATALINA_HOME/conf/server.xml

    ...

    <Connector port="8080" protocol="HTTP/1.1"

              URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"

              enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"

              acceptCount="500"  maxThreads="300"

              useURIValidationHack="false"

              compression="on" compressionMinSize="2048"

              compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

              redirectPort="8443"

    />

    ...

    【注释】

    URIEncoding:URI编码,这里参数是UTF-8,很容易理解,即支持中文域名

    minSpareThreads:最小空闲线程,即tomcat可以保留的最小线程

        |-->    maxSpareThreads:最大空闲进程,如果超出这个参数,则会被回收

    (这两个参数根据实际环境而定,如果每天都有一个并发爆发期,则最好min设置的大一些)

    enableLookups:是否开启域名解析,这个一般都禁止,域名解析影响性能

    disableUploadTimeout:

    connectionTimeout:连接超时时间,单位是ms,根据程序性能决定

    maxThreads:同一时刻可以接收的最大请求,即并发量

    acceptCount:若超出maxThreads,则超出部分不能超过此参数值,若超过,则拒绝

    useURIValidationHack:设置为false可以减少tomcat对一些url的不必要的检查从而减省开销【不明觉厉】

    compression:是否启用压缩,肯定启用了

    compressionMinSize:压缩文件大小下限,单位字节

    compressableMimeType:压缩文件的Mime类型

    redirectPort:重定向(因此若为443https,则8443 connector也应该加入以上参数)



    jvm调优

    vim $CATALINA_HOME/bin/catalina.sh

    ...


    export JAVA_OPTS="-server -Xms8192M -Xmx8192M -Xmn3072M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=4096M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"

    ...

    【注释信息】

    jvm调优其实就是在catalina启动时临时加上JAVA_OPTS变量值的。

    -server:意思就是将tomcat改为生产模式,这个看网上说明,不加的话,就如同实验环境一样。因此,必加参数

    -Xms:jvm最小堆内存

       |-->     -Xmx:jvm最大堆内存

    这两个值的差值叫做保留内存,不过建议最好设置的一样,即最小内存随同最大内存,之所以这么设置是因为,内存回收的时候,也是需要消耗cpu的,如果此时突然并发又来了,而tomcat却在回收内存,那么就不爽了

    -Xmn:新生态内存,这个官方建议是jvm堆内存的3/8,堆内存=新生内存+老年内存+持久内存

    -Xss:设定每个线程的堆栈大小

    -XX:+AggressiveOpts:作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术

    -XX:+UseBiasedLocking:启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。

    -XX:PermSize:持久态最小内存,默认为物理内存大小的1/64

    -XX:MaxPermSize:持久态最大内存,默认为物理内存大小的1/4

    -XX:+DisableExplicitGC:在程序代码中不允许有显示的调用”System.gc()”,【不明觉厉】

    -XX:MaxTenuringThreshold:设置对象在年轻态停留的时间,时间越长,被回收概率越大,若为0,则直接转到老年态

    -XX:+UseConcMarkSweepGC:CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。

    我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。【不明觉厉】

    -XX:+UseParNewGC:年轻代采用多线程并行回收,加速回收  

        |-->   -XX:+CMSParallelRemarkEnabled:在使用UseParNewGC 的情况下, 尽量减少 mark 的时间【不明觉厉】

    -XX:+UseCMSCompactAtFullCollection:在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少【不知道啥意思】

    -XX:LargePageSizeInBytes:指定 Java heap的分页页面大小

    -XX:+UseFastAccessorMethods:get,set 方法转成本地代码【不知道啥意思】

    -XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集【不知道啥意思】

    -Djava.awt.headless=true":这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在 web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显 示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。【虽然知道结果,就是不知道因在何处】









    [星空刺] |-->一颗星辰一闪即逝,支撑它的唯有方向和目的
  • 相关阅读:
    oracle本地编译问题
    ORA-214 signalled during: ALTER DATABASE MOUNT 问题
    mysql常用的一些修改命令
    了解PHP中的Array数组和foreach
    在Sublime Text 3上安装代码格式化插件CodeFormatter
    自动在图片上添加页码
    Ubuntu 16.10 安装byzanz截取动态效果图工具
    PHP赋值运算
    Ubuntu 16.10 安装KolourPaint 4画图工具
    PHP数据类型之间的强制转换
  • 原文地址:https://www.cnblogs.com/aaa103439/p/3588675.html
Copyright © 2011-2022 走看看