码迷,mamicode.com
首页 > 其他好文 > 详细

Tomcat中间件

时间:2017-07-21 22:08:01      阅读:686      评论:0      收藏:0      [点我收藏+]

标签:优化   tomcat   

  • tomcat安装:


    1. 从官网下载tomcat压缩包,然后在指定的目录中进行解压;

    2. 安装jdk,并添加jdk环境变量;

技术分享


  • Tomcat目录:

    [weblogic@VM-10-112-178-157 ~]$ ll -h tob-api
    总用量 120K
    appdir        ------  war包部署位置
    bin            -------启动程序,启动相关的内存设置等;
    conf            -------端口、解压包路径和解压目录名定义等
    lib
    LICENSE
    logs                -------日志
    NOTICE
    RELEASE-NOTES
    RUNNING.txt
    temp                    -------启动时候放置一些临时文档(可删除)
    webapps                --------war包解压后的目录
    work                    ----------启动后一些参数、环境变量(可删除)


  • Tomcat配置;

    配置主要有两个文件:

  1. tomcat/conf/server.xml 文件;

    此文件中定义了tomcat的端口信息;并且可以指定war包路径,以及解压war包后在webapps目录下的目录名称;

    [weblogic@VM-10-112-178-157 tob-api]$ grep -3 war conf/server.xml
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log." suffix=".log"
                   pattern="%t ^=^ %{X-FORWARDED-FOR}i ^=^ %a ^=^ %u ^=^ %{User-Agent}i ^=^ %p ^=^ %s ^=^ %b ^=^ %S ^=^ %T ^=^ %D ^=^ %h ^=^ %r ^=^ %U" />
               
    <Context path="/" docBase="${catalina.base}/appdir/xxx.war" debug="0" privileged="true" reloadable="true" />
          </Host>
        </Engine>
      </Service>
    [weblogic@VM-10-112-178-157 tob-api]$
    其中:path为"/"说明解压后是ROOT目录;docBase指定了war包存放路径和名称;

  2. tomcat/bin/catalina.sh 文件;

            文件定义了内存的使用,以及tomcat性能调优;

            #!/bin/sh
            xms_size=‘2G‘
            xmx_size=‘2G‘


         tomcat调优:

        ENV_DM=`cat ~/.diamond.domain|grep -v "#"`
if [ "${ENV_DM}x" ==  "x" ] || [ "${ENV_DM}x" == "diamond.live.ds.gome.com.cnx" ] || [ "${ENV_DM}x" == "diamond.prelive.ds.gome.com.cnx" ]
  then
    JAVA_OPTS="$JAVA_OPTS -Dapp.home=${CATALINA_BASE} -server -Xms${xms_size} -Xmx${xmx_size} -Xmn2g -Xss256k -XX:PermSize=128m -XX:MaxPermSize=512m -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:AutoBoxCacheMax=20000 -XX:-OmitStackTraceInFastThrow -XX:ErrorFile=${CATALINA_BASE}/logs/hs_err_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${CATALINA_BASE}/logs/ -Xloggc:${CATALINA_BASE}/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
  else
    JAVA_OPTS="$JAVA_OPTS -Dapp.home=${CATALINA_BASE} -server -Xms${xms_size} -Xmx${xmx_size} -Xmn128m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=512m -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:AutoBoxCacheMax=20000 -XX:-OmitStackTraceInFastThrow -XX:ErrorFile=${CATALINA_BASE}/logs/hs_err_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${CATALINA_BASE}/logs/ -Xloggc:${CATALINA_BASE}/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
fi



jvm堆配置参数

1. -Xms初始堆大小    默认物理内存的1/64(<1GB) 2. -Xmx最大堆大小    默认物理内存的1/4(<1GB),实际中建议不大于4GB 3. 一般建议设置-Xms=-Xmx    好处是避免每次在gc后,调整堆的大小,减少系统内存分配开销 4. 整个堆大小=年轻代大小+年老代大小+持久化大小

jvm新生代(young generation)

1. 新生代=1个eden区+2个Survior区 2. -Xmn 年轻代大小(1.4or lator)    -XX:NewSize,-XX:MaxNewSize(设置年轻代大小(for 1.3/1.4))    默认值大小为整个堆的3/8 3. -XX:NewRatio    年轻代(包含Eden和两个Survivor区)与老年代的比值(除去持久化)    Xms=Xmx并且设置了Xmn的情况下,该参数不需要设置 4. -XX:SurviorRatio    Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 5. 用来存放JVM刚分配的Java对象

jvm老年代(tenured greneration)

1. 老年代=整个堆-年轻代大小-持久化大小 2. 年轻代中经过垃圾回收没有回收掉的对象被复制到年老代 3. 老年代存储对象比年轻代年龄大的多,而且不发达对象(缓存) 4. 新建的对象也有可能直接进入老年代    4.1、大对象,可通过启动参数设置-XX:PretenureSizeThreshold=1024(单位为字节,默认为0)来代表超过多大时就不再新生代分配,而是直接在老年代分配    4.2、大的数组对象,切数组中无引用外部对象 5. 老年代大小无配置参数

java持久代(perm generation)

   1. 持久代=整个堆-年轻代大小-老年代大小    2. -XX:PermSize -XX:MaxPermSize        设置持久代的大小,一般情况推荐把-XX:PermSize设置成XX:MaxPermSize的值为相同的值,因为永久代的调整也会导致堆内存需要触发fgc(Full GC)    3. 存放Class,Method元信息,其大小与项目的规模、类、方法的数量有关。一般设置为128M就够用,设置原则是预留30%的空间    4. 永久代的回收方式        4.1、常量池的常量,无用的类信息,常量的回收很简单,没有引用的就可以被回收        4.2、对无用的类进行回收,必须保证3点:            类的所有实例都已经被回收            加载类的ClassLoader已经被回收            类对象的Class对象没有被引用(既没有通过反射引用该类的方法)








Tomcat中间件

标签:优化   tomcat   

原文地址:http://allveny.blog.51cto.com/8994099/1949765

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!