tomcat優化

tomcat內存優化

Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數。在 配置文件中的102行添加就行

注意:堆最大值和非堆最大值的總和超過了物理內存或者操作系統的最大限制都會引起服務器啟動不起來。
JAVA_OPTS參數說明
   -server 啟用jdk 的 server 版;
  -Xms java虛擬機初始化時的最小內存;
   -Xmx java虛擬機可使用的最大內存;
   -XX: PermSize 內存永久保留區域
   -XX:MaxPermSize 內存最大永久保留區域

一般設置-Xms,-Xmx相等以避免在每次GC后調整堆的大小,因為默認空余堆內存小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內存大于70%時,JVM會減少堆直到-Xms的最小限制

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

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

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




## tomcat運行模式的優化

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

**BIO(blocking I/O)**

是基于JAVA的HTTP/1.1連接器,Tomcat7以下版本在默認情況下是以bio模式運行的。一般而言,bio模式是三種運行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務器的當前狀態。(**Tomcat7** 或以下,在 **Linux** 系統中默認使用這種方式)一個線程處理一個請求,缺點:并發量高時,線程數較多,浪費資源
<Connector port="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

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

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

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

APR (Apache Portable Runtime/Apache可移植運行時) ( 安裝配置過程相對復雜)

APR(Apache Portable Run-time libraries)簡單理解,就是從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和響應性能, 也是Tomcat運行高并發應用的首選模式。APR是使用原生C語言編寫的非堵塞I/O,利用了操作系統的網絡連接功能,速度很快。但是需先安裝apr和native,能大幅度提升性能,不亞于魔獸開局爆高科技兵種,威力強大

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執行器(線程池)的優化
開啟線程池:打開server.xml中關于線程池的配置
#一般情況下我們不使用Executor開啟線程池,我們在Connector上直接配置
$ 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/" />

參數解釋:
port:服務端口TCP端口,默認值為8089;


connectionTimeout:設置連接的超時值,單位毫秒,默認值為60000;

keepAliveTimeout:當http使用keep-alive時在tcp的一個連接中可以接收多個request,意思就是兩個request間的時間限定最大保持時間,超過這個時間,連接將斷開,單位毫秒,默認使用的是connectionTimeout的時間;

maxKeepAliveRequests:在服務器關閉前,該連接最大支持的請求數,超過該請求數的連接也將被關閉,設置為1表示禁用,設置為-1表示不限個數,默認值為100;

maxHttpHeaderSize:HTTP請求和響應頭的最大量,單位字節,默認值為4096字節;

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

enableLookups:調用request、getRemoteHost()執行DNS查詢,以返回遠程主機的主機名,如果設置為false,則直接返回IP地址,DNS反查很耗時間

acceptCount:當所以可以處理的線程正在使用的時候,在隊列中排隊請求的最大連接數,當隊列已滿,所有請求都將被拒絕,默認值為100;

disableUploadTimeout:上傳時是否使用超時機制,以是servlet有較長時間來完成它的執行,默認值為false;

redirectPort:如連接器不支持SSL請求,如收到SSL請求,Catalina容器將會自動重定向指定的端口號,讓其進行處理;

compression:是否對響應的數據進行壓縮,off:禁止壓縮,on:允許壓縮(文本將被壓縮),force:表示所有情況下都進行壓縮,默認值為off;

compressionMinSize:啟用壓縮的輸出內容大小,默認為2KB

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

compressableMineType:MIME的列表,默認以逗號分隔,默認值為text/html,text/xml,text/plain;




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

針對該信息的顯示是由一個jar包控制的,該jar包存放在 Tomcat 安裝目錄下的lib目錄下,名稱為catalina.jar。

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

設置session失效時長

我們都知道,HTTP協議本身是無狀態的(Stateless),這對于一些簡單的頁面展示來說,功能足夠,不受影響。而對于日漸復雜的動態頁面、應用,各種需要登錄認證等場景,就力不從心了。試想對于一個已經登錄的用戶仍然一次次的提示登錄,會是什么感受呢?而為了保持客戶端和服務端交互狀態,可以采取session失效時長

Tomcat的可以在以下幾個地方設置會話超時:

web級別:

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

webapp級別:

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

應用程序代碼中:硬編碼

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

優先級,越細粒度優先級越高,也就是3> 2> 1

還要一種配置,但現在比較少見了,因為需要將上下文配置在server.xml里:

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




## 禁用AJP連接器實現動靜分離
#Tomcat 服務器通過Connector連接器組件與客戶程序建立連接,Connector組件負責接收客戶的請求,以及把Tomcat服務器的響應結果發送給客 戶。默認情況下,Tomcat在server.xml中配置了兩種連接器,一種使用ajp,要和apache結合使用,一種使用http。當使用http 時,可以限制ajp端口訪問,在于防止線下測試流量被mod_jk轉發至線上tomcat服務器。可以通過iptables規則限制ajp端口的訪問,或 者直接將改行注釋。

$ vim conf/server.xml
    <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
    
# Apache基金下的服務器來做靜態資源處理的,而這部分需要花費大量時間,當用nginx和tomcat做企業級集群的時候,需要禁用掉AJP協議。

#nginx加tomcat實現動靜分離
web客戶1訪問tomcat服務器的 資源index.jsp 是可以直接訪問的,如果我們訪問的是靜態資源,tomcat是不方便處理的它會把這些靜態資源返回給Apache服務器,由他們返回給用戶,所以tomcat服務器相對于nginx服務器在處理靜態資源上效率較低。因此我們的網站服務器一般是Nginx+tomcat,nginx負責處理靜態資源,因此AJP 協議我們在使用nginx+tomcat架構時可以關閉它來進行效率的優化。

文件列表訪問控制

conf/web.xml文件中的default部分listings的配置必須為false,false為不列出目錄文件,true為允許列出,默認為false。

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



### 訪問日志格式規范
# 開啟Referer和User-Agetn是為了一旦出現安全問題能夠更好的根據日志進行排查
 $ 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>

配置管理員賬戶

進入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"/>

還有很多權限配置可以百度

訪問:http://ip地址:8080/manager/status 就會出現監控頁面




























?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 常見的http服務器有apache,nginx,iis,tomcat等。HTTP服務器本質上也是一種應用程序——它...
    可樂愛上咖啡閱讀 3,994評論 1 49
  • 文章針對linux操作系統。 圖片中,html頁面,在tomcat安裝目錄下。 一、內存優化 linux系...
    撒啊啊啊空間閱讀 694評論 0 1
  • 本文檔是身邊一些朋友、技術大佬之前分享的一些筆記,記錄了 Tomcat 優化方法,筆記較多而且比較雜亂,經過整理、...
    zwb_jianshu閱讀 751評論 0 1
  • http://blog.csdn.net/wuliu_forever/article/details/526071...
    魚仔_1625閱讀 981評論 0 1
  • 鐘意了一個女仔,以前從未試過有呢種感覺,居然好想見到距
    斯_395d閱讀 153評論 0 0