摘要:不同的應(yīng)用場景,不同的架構(gòu),不同的需求,都會對優(yōu)化設(shè)置有不同要求。在這里我所記述的只是我自己在一些應(yīng)用中所設(shè)置的優(yōu)化項,以備不時之需,并不是放之四海而皆準的準則。為了消除這些警告,還需要根治。
一千個人眼中就有一千個哈姆雷特。——偽西方諺語
關(guān)于Tomcat的優(yōu)化點之多,我估計沒有上萬,也有成千。不同的應(yīng)用場景,不同的架構(gòu),不同的需求,都會對優(yōu)化設(shè)置有不同要求。在這里我所記述的只是我自己在一些Tomcat應(yīng)用中所設(shè)置的優(yōu)化項,以備不時之需,并不是放之四海而皆準的準則。
pom.xml對于maven項目來說,pom.xml設(shè)置是整個設(shè)置的核心,如果pom.xml設(shè)置不當(dāng),雖然有時候也可以編譯運行,但總是會出現(xiàn)一些令人討厭的警告。為了消除這些警告,還需要根治pom.xml。
重復(fù)依賴首先要解決的是重復(fù)依賴問題,有時候我們會在編譯項目時遇到下面的這樣的警告:
[WARNING] [WARNING] Some problems were encountered while building the effective model for com.qiban.supplier:saas-supplier:war:1.0-SNAPSHOT [WARNING] "dependencies.dependency.(groupId:artifactId:type:classifier)" must be unique: commons-codec:commons-codec:jar -> duplicate declaration of version 1.9 @ line 264, column 21 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING]
解決的方法很簡單:在pom.xml中搜索出現(xiàn)重復(fù)依賴的jar包名稱,你肯定會發(fā)現(xiàn)對于同一個jar包,重復(fù)引用了多次,也許版本相同,也許版本不同,只要刪除掉那些重復(fù)的就可以了。
maven編譯器版本有時候會遇到下面這樣的錯誤:
[WARNING] [WARNING] Some problems were encountered while building the effective model for com.qiban.supplier:saas-supplier:war:1.0-SNAPSHOT [WARNING] "build.plugins.plugin.version" for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 297, column 21 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING]
這意思是說你沒有在pom.xml里指定maven的版本,在pom.xml里添加maven的版本就可以了:
saas-supplier org.apache.maven.plugins maven-compiler-plugin 3.5.1 1.8
重點是上面那個
有的時候會遇到一行簡單的警告:
[WARNING] The artifact jdom:jdom:jar:1.1 has been relocated to org.jdom:jdom:jar:1.1
這個的意思是說在你的pom.xml里,你需要把jdom的groupId改為org.jdom:
activemq-springorg.jdom jdom 1.1
下面這個警告不會在編譯時出現(xiàn),但是會在運行時出現(xiàn),也非常惡心:
SLF4J: Class path contains multiple SLF4J bindings
我們需要把pom.xml里的activemq-all改成activemq-spring:
org.apache.activemq activemq-spring 5.11.1
詳細解釋可以看我的這篇文章。
log4j.properties終于改完了pom.xml,我們開始處理log4j。
xmemcached如果你使用了xmemcached,那么日志里會不斷地出現(xiàn)xmemcached的警告,而這些警告對我們來說根本就不是警告,毫無意義,并且會掩蓋真正的錯誤,所以我們通過修改log4j.properties文件屏蔽它:
# xmemcached log4j.logger.com.google.code=OFF log4j.logger.net.rubyeye.xmemcached=OFF
我這里比較野蠻粗暴地直接使用了OFF選項,如果你不放心,可以改成ERROR選項,效果是一樣的。
webapp名稱+%c如果你有多個webapp,為了準確顯示到底是哪個webapp的哪個class報的錯,我們需要在log4j.properties文件里注明我們的webapp名稱,再加上一個%c符號:
log4j.appender.STDOUT.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p - activity - %c - %m%n
這樣下回再有任何錯誤,我們可以第一時間迅速定位到到底是哪個webapp的哪個class出的錯誤。
logrotate如果我們不管不顧的話,Tomcat的日志文件幾乎會無限制增長,最終會耗盡我們的硬盤空間,所以我們需要用logrotate來限制它一下,在/etc/logrotate.d文件夾下創(chuàng)建一個文件tomcat:
/opt/tomcat1/logs/catalina.out /opt/tomcat2/logs/catalina.out { copytruncate daily rotate 7 compress missingok size 10M }setenv.sh
Tomcat不問青紅皂白,上來就要占領(lǐng)我們主機整個物理內(nèi)存的四分之一,我們需要限制它的大小,寧可浪費一些CPU和硬盤的時間去讓它不斷地垃圾回收,也不想讓它占用這么多的內(nèi)存,所以我們需要在/opt/tomcat/bin下建立一個setenv.sh文件,強制讓它最多占用1G內(nèi)存:
export CATALINA_OPTS="$CATALINA_OPTS -Xms512m" export CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m"
這樣我們一臺16G內(nèi)存的主機,可以同時運行16個Tomcat,而不像以前,最多只能同時運行4個Tomcat。
jarsToSkipTomcat啟動時會不斷地掃描所有.jar文件,并且報一些不知所謂的警告:
09-Dec-2017 20:03:14.289 FINE [localhost-startStop-1] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan No TLD files were found in [file:/home/apache-tomcat-8.5.4/lib/tomcat-redis-session-manager-master-2.0.0.jar]. Consider adding the JAR to the tomcat.util.scan.StandardJarScanFilter.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.
直接在/opt/tomcat/conf/catalina.properties文件里把這一句話改成:
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
這個世界終于清靜了,掃什么掃,有什么可掃的!
startStopThreads當(dāng)你有多個webapp的時候,Tomcat缺省會啟完一個webapp再啟下一個,這樣太慢了,不可忍受,我們在/opt/tomcat/conf/server.xml文件里把它的啟動線程數(shù)直接干到20個:
Dubbo
有時候Dubbo也會跳出來搗亂,在每一個不同的webapp下的consumer.xml文件里指定file:
每個webapp的file名稱各不相同,它們再也不會互相打架了。
結(jié)語以上所述也不過只是冰山之一角,好記性不如爛筆頭,記錄下來作為以后每次優(yōu)化時的依據(jù),也許對遇到類似問題的你也略有啟發(fā)吧。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77225.html
摘要:在利用收集了兩次的相關(guān)數(shù)據(jù),發(fā)現(xiàn)這和的存在關(guān)系,圖表如下在第一次的前期,動作比較多,此時的吞吐量一直維持在比較低的水平。第二次幾乎沒有的動作,此時的吞吐量一直維持在比較高的水平。 本文是在Tomcat調(diào)優(yōu)過程中得到的心得(會持續(xù)更新),相關(guān)環(huán)境: java version 1.8.0_131 Tomcat 8.5.14 Jmeter 3.1 Jmeter參數(shù): 300線程 100...
閱讀 3490·2021-11-12 10:36
閱讀 2864·2021-09-22 15:35
閱讀 2814·2021-09-04 16:41
閱讀 1167·2019-08-30 15:55
閱讀 3580·2019-08-29 18:43
閱讀 2075·2019-08-23 18:24
閱讀 1419·2019-08-23 18:10
閱讀 1924·2019-08-23 11:31