tomcat優(yōu)化

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

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

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

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

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

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

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




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

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

**BIO(blocking I/O)**

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

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

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

**Tomcat8**: 以上版本在 **Linux** 系統(tǒng)中,默認使用的就是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)簡單理解,就是從操作系統(tǒng)級別解決異步IO問題,大幅度的提高服務器的處理和響應性能, 也是Tomcat運行高并發(fā)應用的首選模式。APR是使用原生C語言編寫的非堵塞I/O,利用了操作系統(tǒng)的網(wǎng)絡連接功能,速度很快。但是需先安裝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執(zhí)行器(線程池)的優(yōu)化
開啟線程池:打開server.xml中關(guān)于線程池的配置
#一般情況下我們不使用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/" />

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


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

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

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

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

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

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

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

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

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

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

compressionMinSize:啟用壓縮的輸出內(nèi)容大小,默認為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 字段來實現(xiàn)來更改我們tomcat的版本信息。

設置session失效時長

我們都知道,HTTP協(xié)議本身是無狀態(tài)的(Stateless),這對于一些簡單的頁面展示來說,功能足夠,不受影響。而對于日漸復雜的動態(tài)頁面、應用,各種需要登錄認證等場景,就力不從心了。試想對于一個已經(jīng)登錄的用戶仍然一次次的提示登錄,會是什么感受呢?而為了保持客戶端和服務端交互狀態(tài),可以采取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 ); //以秒為單位  

優(yōu)先級,越細粒度優(yōu)先級越高,也就是3> 2> 1

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

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




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

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

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

文件列表訪問控制

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

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



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

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

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




























?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容