1. 程式人生 > >Tomcat中間件

Tomcat中間件

優化 tomcat

  • tomcat安裝:


    1. 從官網下載tomcat壓縮包,然後在指定的目錄中進行解壓;

    2. 安裝jdk,並添加jdk環境變量;

技術分享


  • Tomcat目錄:

    [[email protected] ~]$ 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目錄下的目錄名稱;

    [[email protected] 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>
    [[email protected] 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中間件