tomcat優(yōu)化

tomcat內(nèi)存優(yōu)化

Tomcat內(nèi)存優(yōu)化主要是對(duì) tomcat 啟動(dòng)參數(shù)優(yōu)化劫狠,我們可以在 tomcat 的啟動(dòng)腳本 catalina.sh 中設(shè)置 java_OPTS 參數(shù)。在 配置文件中的102行添加就行

注意:堆最大值和非堆最大值的總和超過了物理內(nèi)存或者操作系統(tǒng)的最大限制都會(huì)引起服務(wù)器啟動(dòng)不起來。
JAVA_OPTS參數(shù)說明
   -server 啟用jdk 的 server 版;
  -Xms java虛擬機(jī)初始化時(shí)的最小內(nèi)存;
   -Xmx java虛擬機(jī)可使用的最大內(nèi)存氢伟;
   -XX: PermSize 內(nèi)存永久保留區(qū)域
   -XX:MaxPermSize 內(nèi)存最大永久保留區(qū)域

一般設(shè)置-Xms,-Xmx相等以避免在每次GC后調(diào)整堆的大小幽歼,因?yàn)槟J(rèn)空余堆內(nèi)存小于40%時(shí)朵锣,JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí)试躏,JVM會(huì)減少堆直到-Xms的最小限制

現(xiàn)公司服務(wù)器內(nèi)存一般都可以加到最大2G 猪勇,所以可以采取以下配置:
  JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
  配置完成后可重啟Tomcat
  首先查看Tomcat 進(jìn)程號(hào):
  ps aux | grep tomcat #查看tomcat的主進(jìn)程號(hào)
  查看參數(shù)是否生效
  jmap -heap 12222 #12222是主進(jìn)程號(hào)

堆(Heap)和非堆(Non-heap)內(nèi)存解釋

https://www.cnblogs.com/centos2017/p/9956432.html




## tomcat運(yùn)行模式的優(yōu)化

`Tomcat Connector(連接器)有三種運(yùn)行模式:BIO NIO APR`

**BIO(blocking I/O)**

是基于JAVA的HTTP/1.1連接器设褐,Tomcat7以下版本在默認(rèn)情況下是以bio模式運(yùn)行的颠蕴。一般而言拉鹃,bio模式是三種運(yùn)行模式中性能最低的一種稿辙。我們可以通過Tomcat Manager來查看服務(wù)器的當(dāng)前狀態(tài)。(**Tomcat7** 或以下,在 **Linux** 系統(tǒng)中默認(rèn)使用這種方式)一個(gè)線程處理一個(gè)請(qǐng)求脆淹,缺點(diǎn):并發(fā)量高時(shí),線程數(shù)較多讹弯,浪費(fèi)資源
<Connector port="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

#### **NIO(new I/O)**

是一個(gè)基于緩沖區(qū)月幌、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫西轩。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運(yùn)行性能员舵。要讓Tomcat以nio模式來運(yùn)行只需要在Tomcat安裝目錄/conf/server.xml 中將對(duì)應(yīng)的中protocol的屬性值改為 org.apache.coyote.http11.Http11NioProtocol即可利用 Java 的異步請(qǐng)求 IO 處理,可以通過少量的線程處理大量的請(qǐng)求藕畔。

**Tomcat8**: 以上版本在 **Linux** 系統(tǒng)中马僻,默認(rèn)使用的就是NIO模式,不需要額外修改注服,**Tomcat7**必須修改Connector配置來啟動(dòng)
<Connector port="9090" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

APR (Apache Portable Runtime/Apache可移植運(yùn)行時(shí)) ( 安裝配置過程相對(duì)復(fù)雜)

APR(Apache Portable Run-time libraries)簡(jiǎn)單理解韭邓,就是從操作系統(tǒng)級(jí)別解決異步IO問題,大幅度的提高服務(wù)器的處理和響應(yīng)性能溶弟, 也是Tomcat運(yùn)行高并發(fā)應(yīng)用的首選模式女淑。APR是使用原生C語言編寫的非堵塞I/O,利用了操作系統(tǒng)的網(wǎng)絡(luò)連接功能辜御,速度很快鸭你。但是需先安裝apr和native,能大幅度提升性能擒权,不亞于魔獸開局爆高科技兵種苇本,威力強(qiáng)大

wget http://mirror.bit.edu.cn/apache//apr/apr-1.7.0.tar.gz wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
wget http://mirror.bit.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz yum install expat-devel openssl gcc

具體安裝部署: https://my.oschina.net/boonya/blog/3019704




### tomcat執(zhí)行器(線程池)的優(yōu)化
開啟線程池:打開server.xml中關(guān)于線程池的配置
#一般情況下我們不使用Executor開啟線程池,我們?cè)贑onnector上直接配置
$ vim /usr/local/tomcat/conf/server.xml
<Connector executor="tomcatThreadPool"   
    port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"   #使用NIO
    connectionTimeout="40000" 
    keepAliveTimeout="30000"
    maxKeepAliveRequests="8000"
    maxHttpHeaderSize="8192"
    URIEncoding="UTF-8"
    enableLookups="false"
    acceptCount="1000"
    disableUploadTimeout="true"
    redirectPort="8443" 
    compression="on"
    compressionMinSize="1024"
    noCompressionUserAgents="gozilla,traviata"              
    compressableMimeType="text/html,image/gif,image/jpeg,text/css,application/" />

參數(shù)解釋:
port:服務(wù)端口TCP端口菜拓,默認(rèn)值為8089瓣窄;


connectionTimeout:設(shè)置連接的超時(shí)值,單位毫秒纳鼎,默認(rèn)值為60000俺夕;

keepAliveTimeout:當(dāng)http使用keep-alive時(shí)在tcp的一個(gè)連接中可以接收多個(gè)request,意思就是兩個(gè)request間的時(shí)間限定最大保持時(shí)間贱鄙,超過這個(gè)時(shí)間劝贸,連接將斷開,單位毫秒逗宁,默認(rèn)使用的是connectionTimeout的時(shí)間映九;

maxKeepAliveRequests:在服務(wù)器關(guān)閉前,該連接最大支持的請(qǐng)求數(shù)瞎颗,超過該請(qǐng)求數(shù)的連接也將被關(guān)閉件甥,設(shè)置為1表示禁用捌议,設(shè)置為-1表示不限個(gè)數(shù),默認(rèn)值為100引有;

maxHttpHeaderSize:HTTP請(qǐng)求和響應(yīng)頭的最大量瓣颅,單位字節(jié),默認(rèn)值為4096字節(jié)譬正;

URIEncoding:指定tomcat的url編碼格式宫补;

enableLookups:調(diào)用request、getRemoteHost()執(zhí)行DNS查詢曾我,以返回遠(yuǎn)程主機(jī)的主機(jī)名粉怕,如果設(shè)置為false,則直接返回IP地址抒巢,DNS反查很耗時(shí)間

acceptCount:當(dāng)所以可以處理的線程正在使用的時(shí)候斋荞,在隊(duì)列中排隊(duì)請(qǐng)求的最大連接數(shù),當(dāng)隊(duì)列已滿虐秦,所有請(qǐng)求都將被拒絕平酿,默認(rèn)值為100;

disableUploadTimeout:上傳時(shí)是否使用超時(shí)機(jī)制悦陋,以是servlet有較長(zhǎng)時(shí)間來完成它的執(zhí)行蜈彼,默認(rèn)值為false;

redirectPort:如連接器不支持SSL請(qǐng)求俺驶,如收到SSL請(qǐng)求幸逆,Catalina容器將會(huì)自動(dòng)重定向指定的端口號(hào),讓其進(jìn)行處理暮现;

compression:是否對(duì)響應(yīng)的數(shù)據(jù)進(jìn)行壓縮还绘,off:禁止壓縮,on:允許壓縮(文本將被壓縮)栖袋,force:表示所有情況下都進(jìn)行壓縮拍顷,默認(rèn)值為off;

compressionMinSize:?jiǎn)⒂脡嚎s的輸出內(nèi)容大小塘幅,默認(rèn)為2KB

noCompressionUserAgents:不啟用壓縮的瀏覽器昔案;

compressableMineType:MIME的列表,默認(rèn)以逗號(hào)分隔电媳,默認(rèn)值為text/html踏揣,text/xml,text/plain匾乓;




## tomcat版本隱藏
為了避免黑客針對(duì)某些版本進(jìn)行攻擊捞稿,因此我們需要隱藏或者偽裝 Tomcat 的版本信息。默認(rèn) Tomcat 的版本信息如下:

針對(duì)該信息的顯示是由一個(gè)jar包控制的,該jar包存放在 Tomcat 安裝目錄下的lib目錄下娱局,名稱為catalina.jar彰亥。

我們可以通過 jar xf 命令解壓這個(gè) jar 包會(huì)得到兩個(gè)目錄 META-INF 和 org ,通過修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段來實(shí)現(xiàn)來更改我們tomcat的版本信息。

設(shè)置session失效時(shí)長(zhǎng)

我們都知道铃辖,HTTP協(xié)議本身是無狀態(tài)的(Stateless),這對(duì)于一些簡(jiǎn)單的頁面展示來說猪叙,功能足夠娇斩,不受影響。而對(duì)于日漸復(fù)雜的動(dòng)態(tài)頁面穴翩、應(yīng)用犬第,各種需要登錄認(rèn)證等場(chǎng)景,就力不從心了芒帕。試想對(duì)于一個(gè)已經(jīng)登錄的用戶仍然一次次的提示登錄歉嗓,會(huì)是什么感受呢?而為了保持客戶端和服務(wù)端交互狀態(tài)背蟆,可以采取session失效時(shí)長(zhǎng)

Tomcat的可以在以下幾個(gè)地方設(shè)置會(huì)話超時(shí):

web級(jí)別:

在conf /web.xml文件中
< session-config >
< session-timeout > 30 </ session-timeout > #默認(rèn)就是30分鐘鉴分,以分為單位
</ session-config >

webapp級(jí)別:

在webapp中的WEB-INF /web.xm
   < session-config >  
       < session-timeout > 30 </ session-timeout >   #以分為單位
   </ session-config > 

應(yīng)用程序代碼中:硬編碼

  session.setMaxInactiveInterval(30 * 60 ); //以秒為單位  

優(yōu)先級(jí),越細(xì)粒度優(yōu)先級(jí)越高带膀,也就是3> 2> 1

還要一種配置志珍,但現(xiàn)在比較少見了,因?yàn)樾枰獙⑸舷挛呐渲迷趕erver.xml里:

這就是修改 conf /server.xml配置文件鐘垛叨,是以秒為單位
< Context path = “/ test” docBase = “/ home / httpd / html / test”
defaultSessionTimeOut = “3600” isWARExpanded = “true”
isWARValidated = “false” isInvokerEnabled = “true”
isWorkDirPersistent = “false” />




## 禁用AJP連接器實(shí)現(xiàn)動(dòng)靜分離
#Tomcat 服務(wù)器通過Connector連接器組件與客戶程序建立連接伦糯,Connector組件負(fù)責(zé)接收客戶的請(qǐng)求,以及把Tomcat服務(wù)器的響應(yīng)結(jié)果發(fā)送給客 戶嗽元。默認(rèn)情況下敛纲,Tomcat在server.xml中配置了兩種連接器,一種使用ajp剂癌,要和apache結(jié)合使用淤翔,一種使用http。當(dāng)使用http 時(shí)佩谷,可以限制ajp端口訪問办铡,在于防止線下測(cè)試流量被mod_jk轉(zhuǎn)發(fā)至線上tomcat服務(wù)器×找可以通過iptables規(guī)則限制ajp端口的訪問寡具,或 者直接將改行注釋。

$ vim conf/server.xml
    <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
    
# Apache基金下的服務(wù)器來做靜態(tài)資源處理的稚补,而這部分需要花費(fèi)大量時(shí)間童叠,當(dāng)用nginx和tomcat做企業(yè)級(jí)集群的時(shí)候,需要禁用掉AJP協(xié)議。

#nginx加tomcat實(shí)現(xiàn)動(dòng)靜分離
web客戶1訪問tomcat服務(wù)器的 資源index.jsp 是可以直接訪問的厦坛,如果我們?cè)L問的是靜態(tài)資源五垮,tomcat是不方便處理的它會(huì)把這些靜態(tài)資源返回給Apache服務(wù)器,由他們返回給用戶杜秸,所以tomcat服務(wù)器相對(duì)于nginx服務(wù)器在處理靜態(tài)資源上效率較低放仗。因此我們的網(wǎng)站服務(wù)器一般是Nginx+tomcat,nginx負(fù)責(zé)處理靜態(tài)資源撬碟,因此AJP 協(xié)議我們?cè)谑褂胣ginx+tomcat架構(gòu)時(shí)可以關(guān)閉它來進(jìn)行效率的優(yōu)化诞挨。

文件列表訪問控制

conf/web.xml文件中的default部分listings的配置必須為false,false為不列出目錄文件呢蛤,true為允許列出惶傻,默認(rèn)為false。

<init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>



### 訪問日志格式規(guī)范
# 開啟Referer和User-Agetn是為了一旦出現(xiàn)安全問題能夠更好的根據(jù)日志進(jìn)行排查
 $ vim conf/server.xml
  <Host name="23.83.xx.xx"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="localhost_access_log" suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b %{Referer}i %{User-Agent}i %D" />
       <Context docBase="/usr/local/tomcat/webapps/FWYsWeb" path=""  reloadable="true"/>
       <Context docBase="/usr/local/tomcat/webapps/FWYsWeb" path="/FWYsWeb"  reloadable="true"/>
  </Host>

配置管理員賬戶

進(jìn)入conf目錄下其障,打開tomcat-users.xml银室,在首尾元素中間加入:

<role rolename="manager"/>
<role rolename="manager-gui"/> #允許訪問html接口(即URL路徑為/manager/html/*)
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

還有很多權(quán)限配置可以百度

訪問:http://ip地址:8080/manager/status 就會(huì)出現(xiàn)監(jiān)控頁面




























?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市励翼,隨后出現(xiàn)的幾起案子蜈敢,更是在濱河造成了極大的恐慌,老刑警劉巖汽抚,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扶认,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡殊橙,警方通過查閱死者的電腦和手機(jī)辐宾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膨蛮,“玉大人叠纹,你說我怎么就攤上這事〕ǜ穑” “怎么了誉察?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惹谐。 經(jīng)常有香客問我持偏,道長(zhǎng),這世上最難降的妖魔是什么氨肌? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任鸿秆,我火速辦了婚禮,結(jié)果婚禮上怎囚,老公的妹妹穿的比我還像新娘卿叽。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布考婴。 她就那樣靜靜地躺著贩虾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沥阱。 梳的紋絲不亂的頭發(fā)上缎罢,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音考杉,去河邊找鬼策精。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奔则,可吹牛的內(nèi)容都是我干的蛮寂。 我是一名探鬼主播蔽午,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼易茬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了及老?” 一聲冷哼從身側(cè)響起抽莱,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骄恶,沒想到半個(gè)月后食铐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僧鲁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年虐呻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寞秃。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斟叼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出春寿,到底是詐尸還是另有隱情朗涩,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布绑改,位于F島的核電站谢床,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厘线。R本人自食惡果不足惜识腿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望造壮。 院中可真熱鬧覆履,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伟众,卻和暖如春析藕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凳厢。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工账胧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人先紫。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓治泥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親遮精。 傳聞我的和親對(duì)象是個(gè)殘疾皇子居夹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 常見的http服務(wù)器有apache,nginx本冲,iis准脂,tomcat等。HTTP服務(wù)器本質(zhì)上也是一種應(yīng)用程序——它...
    可樂愛上咖啡閱讀 3,974評(píng)論 1 49
  • 文章針對(duì)linux操作系統(tǒng)檬洞。 圖片中狸膏,html頁面,在tomcat安裝目錄下添怔。 一湾戳、內(nèi)存優(yōu)化 linux系...
    撒啊啊啊空間閱讀 679評(píng)論 0 1
  • 本文檔是身邊一些朋友、技術(shù)大佬之前分享的一些筆記广料,記錄了 Tomcat 優(yōu)化方法砾脑,筆記較多而且比較雜亂,經(jīng)過整理性昭、...
    zwb_jianshu閱讀 738評(píng)論 0 1
  • http://blog.csdn.net/wuliu_forever/article/details/526071...
    魚仔_1625閱讀 965評(píng)論 0 1
  • 鐘意了一個(gè)女仔拦止,以前從未試過有呢種感覺,居然好想見到距
    斯_395d閱讀 146評(píng)論 0 0