Tomcat 8 安装和配置、优化
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
Tomcat 8 安裝
Tomcat 8 安裝 官網(wǎng):http://tomcat.apache.org/ Tomcat 8 官網(wǎng)下載:http://tomcat.apache.org/download-80.cgi 此時(20160207) Tomcat 8 最新版本為:apache-tomcat-8.0.32.tar.gz 我個人習慣 /opt 目錄下創(chuàng)建一個目錄 setups 用來存放各種軟件安裝包;在 /usr 目錄下創(chuàng)建一個 program 用來存放各種解壓后的軟件包,下面的講解也都是基于此習慣 我個人已經(jīng)使用了第三方源:EPEL、RepoForge,如果你出現(xiàn) yum install XXXXX 安裝不成功的話,很有可能就是你沒有相關(guān)源,請查看我對源設(shè)置的文章 Tomcat 8 下載:wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz 壓縮包解壓:tar -zxvf apache-tomcat-8.0.32.tar.gz 移到解壓出來文件夾到 /usr 下:mv apache-tomcat-8.0.32/ /usr/program/ 為了方便,修改解壓目錄的名字:mv /usr/program/apache-tomcat-8.0.32/ /usr/program/tomcat8/ 設(shè)置 Iptables 規(guī)則(這一步是必須設(shè)置的): 一種方式:先關(guān)閉 iptables,防止出現(xiàn)攔截問題而測試不了:service iptables stop 一種方式:在 iptables 中添加允許規(guī)則(Tomcat 默認端口是 8080): 添加規(guī)則:iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT 保存規(guī)則:service iptables save 重啟 iptables:service iptables restart 測試安裝好后的 Tomcat: 啟動 Tomcat:sh /usr/program/tomcat8/bin/startup.sh ; tail -200f /usr/program/tomcat8/logs/catalina.out 訪問:http://服務(wù)器 IP 地址:8080/ 停止 Tomcat:sh /usr/program/tomcat8/bin/shutdown.sh 如果啟動報:java.net.UnknownHostException 或 localhost. This prevents creation of a GUID 解決辦法: 修改配置文件:vim /etc/sysconfig/network,把里面的 HOSTNAME 改為你自己設(shè)置的一個名字,比如我這邊改為:youmeek 修改配置文件:vim /etc/hosts,把第一行的 127.0.0.1 這一行刪掉,然后再最后一行增加這句:127.0.0.1 localhost youmeek,這里最后的 youmeek 就是主機名 然后重啟計算機:reboot 如果啟動報:java.net.BindException: 地址已在使用 / java.net.BindException: Address already in use 解決辦法:這表示端口被占用,修改 Tomcat 的 server.xml 配置文件,把端口改了即可。 Tomcat 8 配置
設(shè)置 Tomcat 相關(guān)變量: vim /usr/program/tomcat8/bin/catalina.sh 在配置文件的可編輯內(nèi)容最上面(98 行開始),加上如下內(nèi)容(具體參數(shù)根據(jù)你服務(wù)器情況自行修改): JAVA_HOME=/usr/program/jdk1.8.0_72 CATALINA_HOME=/usr/program/tomcat8 CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" CATALINA_PID=$CATALINA_HOME/catalina.pid 如果使用 shutdown.sh 還無法停止 tomcat,可以修改其配置:vim /usr/program/tomcat8/bin/shutdown.sh 把最尾巴這一行:exec "$PRGDIR"/"$EXECUTABLE" stop "$@" 改為:exec "$PRGDIR"/"$EXECUTABLE" stop 10 -force Tomcat 8 優(yōu)化
Tomcat 6/7/8 的優(yōu)化參數(shù)有點不一樣,最好按下面的方式看一下官網(wǎng)這個文檔是否還保留著這個參數(shù) 啟動tomcat,訪問該地址,下面要講解的一些配置信息,在該文檔下都有說明的: 文檔:http://127.0.0.1:8080/docs/config 你也可以直接看網(wǎng)絡(luò)版本: Tomcat 6 文檔:https://tomcat.apache.org/tomcat-6.0-doc/config Tomcat 7 文檔:https://tomcat.apache.org/tomcat-7.0-doc/config/ Tomcat 8 文檔:https://tomcat.apache.org/tomcat-8.0-doc/config/ 如果你需要查看 Tomcat 的運行狀態(tài)可以配置tomcat管理員賬戶,然后登陸 Tomcat 后臺進行查看 編輯 /opt/tomcat7/bin/conf/tomcat-users.xml 文件,在里面添加下面信息: <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/> 編輯配置文件:vim /usr/program/tomcat7/conf/server.xml 打開默認被注釋的連接池配置: 默認值:
<!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> -->
修改為: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="30" maxIdleTime="60000" prestartminSpareThreads = "true" maxQueueSize = "100" /> 重點參數(shù)解釋: maxThreads,最大并發(fā)數(shù),默認設(shè)置 200,一般建議在 500 ~ 800,根據(jù)硬件設(shè)施和業(yè)務(wù)來判斷 minSpareThreads,Tomcat 初始化時創(chuàng)建的線程數(shù),默認設(shè)置 25 prestartminSpareThreads,在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數(shù)值,如果不等于 true,minSpareThreads 的值就沒啥效果了 maxQueueSize,最大的等待隊列數(shù),超過則拒絕請求 maxIdleTime,如果當前線程大于初始化線程,那空閑線程存活的時間,單位毫秒,默認60000=60秒=1分鐘。 修改默認的鏈接參數(shù)配置: 默認值: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 修改為: <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" maxConnections="10000" redirectPort="8443" enableLookups="false" acceptCount="100" maxPostSize="10485760" maxHttpHeaderSize="8192" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="utf-8" /> 重點參數(shù)解釋: protocol,Tomcat 8 設(shè)置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol(如果這個用不了,就用下面那個) protocol,Tomcat 6、7 設(shè)置 nio 更好:org.apache.coyote.http11.Http11NioProtocol enableLookups,禁用DNS查詢 acceptCount,指定當所有可以使用的處理請求的線程數(shù)都被使用時,可以放到處理隊列中的請求數(shù),超過這個數(shù)的請求將不予處理,默認設(shè)置 100 maxPostSize,以 FORM URL 參數(shù)方式的 POST 提交方式,限制提交最大的大小,默認是 2097152(2兆),它使用的單位是字節(jié)。10485760 為 10M。如果要禁用限制,則可以設(shè)置為 -1。 acceptorThreadCount,用于接收連接的線程的數(shù)量,默認值是1。一般這個指需要改動的時候是因為該服務(wù)器是一個多核CPU,如果是多核 CPU 一般配置為 2. maxHttpHeaderSize,http請求頭信息的最大程度,超過此長度的部分不予處理。一般8K。 禁用 AJP(如果你服務(wù)器沒有使用 Apache) 把下面這一行注釋掉,默認 Tomcat 是開啟的。
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
JVM 優(yōu)化
模型資料來源:http://xmuzyq.iteye.com/blog/599750 配比資料:http://www.jianshu.com/p/d45e12241af4 Java 的內(nèi)存模型分為: Young,年輕代(易被 GC)。Young 區(qū)被劃分為三部分,Eden 區(qū)和兩個大小嚴格相同的 Survivor 區(qū),其中 Survivor 區(qū)間中,某一時刻只有其中一個是被使用的,另外一個留做垃圾收集時復(fù)制對象用,在 Young 區(qū)間變滿的時候,minor GC 就會將存活的對象移到空閑的Survivor 區(qū)間中,根據(jù) JVM 的策略,在經(jīng)過幾次垃圾收集后,任然存活于 Survivor 的對象將被移動到 Tenured 區(qū)間。 Tenured,終身代。Tenured 區(qū)主要保存生命周期長的對象,一般是一些老的對象,當一些對象在 Young 復(fù)制轉(zhuǎn)移一定的次數(shù)以后,對象就會被轉(zhuǎn)移到 Tenured 區(qū),一般如果系統(tǒng)中用了 application 級別的緩存,緩存中的對象往往會被轉(zhuǎn)移到這一區(qū)間。 Perm,永久代。主要保存 class,method,filed 對象,這部門的空間一般不會溢出,除非一次性加載了很多的類,不過在涉及到熱部署的應(yīng)用服務(wù)器的時候,有時候會遇到 java.lang.OutOfMemoryError : PermGen space 的錯誤,造成這個錯誤的很大原因就有可能是每次都重新部署,但是重新部署后,類的 class 沒有被卸載掉,這樣就造成了大量的 class 對象保存在了 perm 中,這種情況下,一般重新啟動應(yīng)用服務(wù)器可以解決問題。 Linux 修改 /usr/program/tomcat7/bin/catalina.sh 文件,把下面信息添加到文件第一行。 如果服務(wù)器只運行一個 Tomcat 機子內(nèi)存如果是 4G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" 機子內(nèi)存如果是 8G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" 機子內(nèi)存如果是 16G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" 機子內(nèi)存如果是 32G: CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC" 如果是 8G 開發(fā)機 -Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m 如果是 16G 開發(fā)機 -Xms4096m -Xmx4096m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=256m -XX:MaxPermSize=512m 參數(shù)說明: -Dfile.encoding:默認文件編碼 -server:表示這是應(yīng)用于服務(wù)器的配置,JVM 內(nèi)部會有特殊處理的 -Xmx1024m:設(shè)置JVM最大可用內(nèi)存為1024MB -Xms1024m:設(shè)置JVM最小內(nèi)存為1024m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。 -Xmn1024m:設(shè)置JVM新生代大小(JDK1.4之后版本)。一般-Xmn的大小是-Xms的1/2左右,不要設(shè)置的過大或過小,過大導(dǎo)致老年代變小,頻繁Full GC,過小導(dǎo)致minor GC頻繁。如果不設(shè)置-Xmn,可以采用-XX:NewRatio=2來設(shè)置,也是一樣的效果 -XX:NewSize:設(shè)置新生代大小 -XX:MaxNewSize:設(shè)置最大的新生代大小 -XX:PermSize:設(shè)置永久代大小 -XX:MaxPermSize:設(shè)置最大永久代大小 -XX:NewRatio=4:設(shè)置年輕代(包括 Eden 和兩個 Survivor 區(qū))與終身代的比值(除去永久代)。設(shè)置為 4,則年輕代與終身代所占比值為 1:4,年輕代占整個堆棧的 1/5 -XX:MaxTenuringThreshold=10:設(shè)置垃圾最大年齡,默認為:15。如果設(shè)置為 0 的話,則年輕代對象不經(jīng)過 Survivor 區(qū),直接進入年老代。對于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個較大值,則年輕代對象會在 Survivor 區(qū)進行多次復(fù)制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概論。需要注意的是,設(shè)置了 -XX:MaxTenuringThreshold,并不代表著,對象一定在年輕代存活15次才被晉升進入老年代,它只是一個最大值,事實上,存在一個動態(tài)計算機制,計算每次晉入老年代的閾值,取閾值和MaxTenuringThreshold中較小的一個為準。 -XX:+DisableExplicitGC:這個將會忽略手動調(diào)用 GC 的代碼使得 System.gc() 的調(diào)用就會變成一個空調(diào)用,完全不會觸發(fā)任何 GC Windows 修改 /tomcat7/bin/catalina.bat 文件,找到這一行:echo Using CATALINA_BASE: "%CATALINA_BASE%",然后在其上面添加如下內(nèi)容,此方法只對解壓版的 Tomcat 有效果,對于安裝版本的需要點擊安裝后任務(wù)欄上的那個 Tomcat 圖標,打開配置中有一個 Java Tab 的進行編輯。 set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8" -Dsun.jnu.encoding="UTF8" -Ddefault.client.encoding="UTF-8" -Duser.language=Zh set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC Tomcat 8 的 Log 分割
修改前提:本人為 Tomcat8.5,安裝目錄為:/usr/program/tomcat8 網(wǎng)絡(luò)上的官網(wǎng)地址現(xiàn)在打不開:http://cronolog.org/download/index.html 阿里云的 CentOS 有 epel 源所以可以直接下載:yum install cronolog,此時:2017-02,最新版本為:1.6.2-10.el6 安裝完后,查看下安裝后的目錄位置:which cronolog,我這邊得到的結(jié)果是:/usr/sbin/cronolog,記下這個結(jié)果,后面有用到。 修改 catalina.sh 中的內(nèi)容:vim /usr/program/tomcat8/bin/catalina.sh 找到這段代碼(預(yù)計在 416 行前后): shift touch "$CATALINA_OUT" if [ "$1" = "-security" ] ; then if [ $have_tty -eq 1 ]; then echo "Using Security Manager" fi shift eval $_NOHUP ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS
-classpath ""$CLASSPATH""
-Djava.security.manager
-Djava.security.policy==""$CATALINA_BASE/conf/catalina.policy""
-Dcatalina.base=""$CATALINA_BASE""
-Dcatalina.home=""$CATALINA_HOME""
-Djava.io.tmpdir=""$CATALINA_TMPDIR""
org.apache.catalina.startup.Bootstrap "$@" start \
"$CATALINA_OUT" 2>&1 "&"
else eval $_NOHUP ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS
-classpath ""$CLASSPATH""
-Dcatalina.base=""$CATALINA_BASE""
-Dcatalina.home=""$CATALINA_HOME""
-Djava.io.tmpdir=""$CATALINA_TMPDIR""
org.apache.catalina.startup.Bootstrap "$@" start \
"$CATALINA_OUT" 2>&1 "&"
fi 將上面代碼改為如下,其中請注意這個關(guān)鍵字:/usr/sbin/cronolog,這個是我上面提到的安裝路徑,你如果跟我不一樣,需要自己修改該相關(guān)。 shift
touch "$CATALINA_OUT"
if [ "$1" = "-security" ] ; then if [ $have_tty -eq 1 ]; then echo "Using Security Manager" fi shift eval $_NOHUP ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS
-classpath ""$CLASSPATH""
-Djava.security.manager
-Djava.security.policy==""$CATALINA_BASE/conf/catalina.policy""
-Dcatalina.base=""$CATALINA_BASE""
-Dcatalina.home=""$CATALINA_HOME""
-Djava.io.tmpdir=""$CATALINA_TMPDIR""
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
else eval $_NOHUP ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS
-classpath ""$CLASSPATH""
-Dcatalina.base=""$CATALINA_BASE""
-Dcatalina.home=""$CATALINA_HOME""
-Djava.io.tmpdir=""$CATALINA_TMPDIR""
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
fi 靜止外網(wǎng)通過 8080 端口訪問 Tomcat
添加 iptables 規(guī)則: iptables -t filter -A INPUT -p tcp -m tcp --dport 8080 -s localhost -j ACCEPT iptables -t filter -A INPUT -p tcp -m tcp --dport 8080 -j REJECT service iptables save service iptables restart 其他
Tomcat 歷史版本下載地址整理(不間斷更新): Tomcat 9.0.0.M4:wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.0.M4/bin/apache-tomcat-9.0.0.M4.tar.gz Tomcat 8.0.32:wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz Tomcat 7.0.68:wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.68/bin/apache-tomcat-7.0.68.tar.gz Tomcat 6.0.45:wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.45/bin/apache-tomcat-6.0.45.tar.gz 資料
http://www.jikexueyuan.com/course/2064_3.html?ss=1 http://www.wellho.net/mouth/2163_CATALINA-OPTS-v-JAVA-OPTS-What-is-the-difference-.html http://blog.csdn.net/sunlovefly2012/article/details/47395165 http://blog.csdn.net/lifetragedy/article/details/7708724 http://ihuangweiwei.iteye.com/blog/1233941 http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html https://tomcat.apache.org/tomcat-8.0-doc/config/http.html#Connector_Comparison http://www.apelearn.com/study_v2/chapter23.html http://blog.csdn.net/hanzheng260561728/article/details/51236131 http://blog.csdn.net/attagain/article/details/38639007
轉(zhuǎn)載于:https://my.oschina.net/u/2605948/blog/886953
總結(jié)
以上是生活随笔為你收集整理的Tomcat 8 安装和配置、优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Samba】安装与配置
- 下一篇: 【个人申明】主要发表平台迁至简书和公众号