tomcat8性能優(yōu)化

工作中項(xiàng)目的原因,項(xiàng)目云上貴州服務(wù)器有時(shí)候支撐不起太高的并發(fā)量,而且又沒那么快更換更優(yōu)的服務(wù)器蛾派,所以只能從tomcat上去做一些優(yōu)化了。

tomcat優(yōu)化我是從兩個(gè)地方入手个少,一個(gè)就是server.xml洪乍,還有一個(gè)就是catalina.sh。


server.xml

找到tomcat->conf下的server.xml

  1. 先來看一個(gè)tomcat的線程池夜焦,默認(rèn)的:
<!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->

這里默認(rèn)是注釋掉的壳澳,我們修改為:

<Executor
      name="tomcatThreadPool" 
      namePrefix="catalina-exec-"
      maxThreads="900"
      minSpareThreads="100"
      maxSpareThreads="500"
      prestartminSpareThreads="true"
      maxQueueSize="300"
      />
  • maxThreads:最大并發(fā)數(shù),默認(rèn)為200茫经,一般設(shè)置在600-900
  • minSpareThreads:最小備用線程數(shù)巷波,tomcat初始化時(shí)創(chuàng)建的線程,默認(rèn)為25
  • maxSpareThreads:最大備用線程數(shù)
  • prestartminSpareThreads:在Tomcat初始化的時(shí)候就初始化 minSpareThreads 的參數(shù)值卸伞,如果不等于 true抹镊,minSpareThreads的值就沒啥效果了
  • maxQueueSize:最大的等待隊(duì)列數(shù),超過則拒絕請(qǐng)求
  1. 修改鏈接參數(shù):
    默認(rèn)的是:
<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

默認(rèn)的是http協(xié)議的荤傲,我們這里先將tomcat設(shè)置成了https協(xié)議:

<Connector port="9090" 
      protocol="org.apache.coyote.http11.Http11Nio2Protocol"
      maxThreads="10000"
      SSLEnabled="true"
      scheme="https"
      secure="true"
      keystoreFile="cert/wtm-ssl.pfx"
      keystorePass="111"
      keystoreType="PKCS12"
      useBodyEncodingForURI="true"
      clientAuth="false"
      sslProtocol="TLS"
      connectionTimeout="20000"
      redirectPort="8443"

需不需要改成https協(xié)議按業(yè)務(wù)來分垮耳,在此基礎(chǔ)上接著:

      executor="tomcatThreadPool"
      maxConnections="900"
      enableLookups="false"
      acceptCount="700"
      maxPostSize="10485760"
      disableUploadTimeout="true"
      compression="on"
      compressionMinSize="2048"
      maxProcessors="1000"
      minProcessors="5"         
      compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
      URIEncoding="UTF-8"
/>

首先要執(zhí)行之前配置的tomcat線程池

  • maxConnections:最大連接數(shù)
  • enableLookups:禁用DNS查詢,為了提高性能,設(shè)置為false
  • acceptCount:當(dāng)線程數(shù)達(dá)到maxThreads后后續(xù)請(qǐng)求會(huì)被放入一個(gè)等待隊(duì)列终佛,這個(gè)acceptCount就是這個(gè)隊(duì)列的大小俊嗽,默認(rèn)為100
  • maxPostSize:以FORM URL參數(shù)方式提交post請(qǐng)求,限制提交最大的大小铃彰,默認(rèn)2097152字節(jié)(2M)
  • disableUploadTimeout:類似于Apache中的keeyalive一樣,是否需要tomcat容器單獨(dú)設(shè)置上傳時(shí)間限制绍豁,這里是不用,還是使用標(biāo)準(zhǔn)的牙捉,不去給上傳的附件單獨(dú)做超時(shí)設(shè)置
  • compression:設(shè)置是否開啟GZip壓縮HTTP 壓縮
  • compressionMinSize:?jiǎn)⒂脡嚎s的輸出內(nèi)容大小竹揍,這里面默認(rèn)為2KB
  • maxProcessors:線程共享地址空間
  • minProcessors:線程共享地址空間
  • compressableMimeType:需要壓縮的類型

catalina.sh

在tomcat/bin/catalina.sh文件中,將下列添加到文件第一行:
如果服務(wù)器只運(yùn)行一個(gè)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"

參數(shù)說明:

  • -Dfile.encoding:默認(rèn)文件編碼
  • -server:表示這是應(yīng)用于服務(wù)器的配置鹃共,JVM 內(nèi)部會(huì)有特殊處理的
  • -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和兩個(gè)Survivor)與終身代的比值(去除永久代)
  • -XX:MaxTenuringThreshold=10:設(shè)置垃圾最大年齡慕嚷,默認(rèn)為:15哥牍。如果設(shè)置為 0 的話,則年輕代對(duì)象不經(jīng)過 Survivor 區(qū)喝检,直接進(jìn)入年老代嗅辣。對(duì)于年老代比較多的應(yīng)用,可以提高效率挠说。
  • -XX:+DisableExplicitGC:這個(gè)將會(huì)忽略手動(dòng)調(diào)用 GC 的代碼使得 System.gc() 的調(diào)用就會(huì)變成一個(gè)空調(diào)用澡谭,完全不會(huì)觸發(fā)任何 GC

JVM的垃圾回收機(jī)制:

jvm的內(nèi)存分為2類,一個(gè)是perm型损俭,一個(gè)是generation型蛙奖。perm區(qū)域存放的是class這些靜態(tài)信息,一般默認(rèn)為64m杆兵,如果項(xiàng)目很大雁仲,有可能已啟動(dòng)就會(huì)報(bào)錯(cuò):out of memory permsize。重新設(shè)置一下permsize就可以解決琐脏。

而generation區(qū)域攒砖,應(yīng)用代碼基本在這個(gè)區(qū)域活動(dòng),new的類都會(huì)在這個(gè)區(qū)域,而且jvm的絕大部分工作也在這里祭衩。大致理解一下:

這個(gè)區(qū)域區(qū)域包含新生代老生代區(qū)域,所有new出來的會(huì)放置在新區(qū)域阅签,而多次回收失敗的一些一直被使用的實(shí)例則會(huì)被轉(zhuǎn)移到老生代掐暮,所以新生代區(qū)域的活動(dòng)很頻繁。新生代內(nèi)存不足會(huì)觸發(fā)一次這個(gè)區(qū)域的GC---然后再到老生代GC---最后FULL GC政钟。FULL GC代價(jià)很高路克,應(yīng)盡量避免,盡量在newsize參數(shù)的這個(gè)區(qū)gc养交,一般配置 newsize分配到總內(nèi)存1/4左右精算,---最終,如果full gc 還是內(nèi)存不足碎连,那就會(huì)引發(fā)out of memory 常見的那種灰羽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鱼辙,隨后出現(xiàn)的幾起案子廉嚼,更是在濱河造成了極大的恐慌,老刑警劉巖倒戏,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怠噪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡杜跷,警方通過查閱死者的電腦和手機(jī)傍念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葛闷,“玉大人憋槐,你說我怎么就攤上這事》踉耍” “怎么了秦陋?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長治笨。 經(jīng)常有香客問我驳概,道長,這世上最難降的妖魔是什么旷赖? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任顺又,我火速辦了婚禮,結(jié)果婚禮上等孵,老公的妹妹穿的比我還像新娘稚照。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布果录。 她就那樣靜靜地躺著上枕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弱恒。 梳的紋絲不亂的頭發(fā)上辨萍,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音返弹,去河邊找鬼锈玉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛义起,可吹牛的內(nèi)容都是我干的拉背。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼默终,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼椅棺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起穷蛹,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤土陪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肴熏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鬼雀,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蛙吏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了源哩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸦做,死狀恐怖励烦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泼诱,我是刑警寧澤坛掠,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站治筒,受9級(jí)特大地震影響屉栓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耸袜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一友多、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堤框,春花似錦域滥、人聲如沸纵柿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昂儒。三九已至,卻和暖如春委可,著一層夾襖步出監(jiān)牢的瞬間荆忍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來泰國打工撤缴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叽唱。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓屈呕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棺亭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虎眨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 在tomcat/catalina.sh中加入下面的配置,內(nèi)存要根據(jù)機(jī)器實(shí)際情況配置镶摘,如果配置內(nèi)存太大了有可能機(jī)器很...
    sherlock_6981閱讀 13,420評(píng)論 0 6
  • 從三月份找實(shí)習(xí)到現(xiàn)在嗽桩,面了一些公司,掛了不少凄敢,但最終還是拿到小米碌冶、百度、阿里涝缝、京東扑庞、新浪、CVTE拒逮、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,216評(píng)論 11 349
  • 參數(shù)設(shè)置 在Java虛擬機(jī)的參數(shù)中罐氨,有3種表示方法用“ps -ef |grep "java"命令,可以得到當(dāng)前Ja...
    九問閱讀 9,128評(píng)論 2 52
  • 【六項(xiàng)精進(jìn)打卡】 2018.7.13 姓名:陳崗 企業(yè)名稱:上海孚因流體動(dòng)力設(shè)備股份有限公司 打卡第82天 【知~...
    我心依舊_79e2閱讀 199評(píng)論 0 0
  • 其實(shí)滩援,有些時(shí)候栅隐,在有些事情上,做一個(gè)輕度強(qiáng)迫癥患者是件好事玩徊。在工作時(shí)租悄,早上列出一天的計(jì)劃,完成一項(xiàng)劃掉一項(xiàng)佣赖,...
    睡著了的貓閱讀 259評(píng)論 0 0