Tomcat參數配置

1. JAVA_OPTS內存優化

Tomcat內存優化主要是對啓動參數的優化,能夠在Tomcat的啓動腳本catalina.sh中設置JAVA_OPTS參數。javascript

-server  啓用jdk 的 server 版;  
    -Xms    java虛擬機初始化時的最小內存;  
    -Xmx   java虛擬機可以使用的最大內存;

配置完成後重啓Tomcat,經過如下命令查看配置是否生效。css

1.首先查看Tomcat進程號html

ps -ef|grep java;進程號22222前端

2.經過進程號查看配置是否生效java

sudo jmap -heap 22222nginx

2. server.xml優化

Tomcat的主要配置文件,該配置中包含不少元素service、host、connector等。web

<Server>
  <Listener />
  <GlobaNamingResources>
  </GlobaNamingResources
  <Service>
    <Connector />
    <Engine>
      <Logger />
      <Realm />
      <host>
         <Logger />
         <Context />
      </host>
    </Engine>
  </Service>
</Server>

maxThreads 客戶請求最大線程數,默認200shell

minSpareThreads Tomcat初始化時建立的 socket 線程數apache

maxSpareThreads Tomcat鏈接器的最大空閒 socket 線程數瀏覽器

minProcessors:最小空閒鏈接線程數,用於提升系統處理性能,默認值爲 10

maxProcessors:最大鏈接線程數,即:併發處理的最大請求數,默認值爲 75

acceptCount:容許的最大鏈接數,應大於等於 maxProcessors ,默認值爲 100

enableLookups:是否反查域名,取值爲: true 或 false 。爲了提升處理能力,應設置爲 false

redirectPort 在須要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口

acceptAccount 監聽端口隊列最大數,滿了以後客戶請求會被拒絕(不能小於maxSpareThreads )

connectionTimeout:網絡鏈接超時,單位:毫秒。設置爲 0 表示永不超時,這樣設置有隱患的。一般可設置爲30000 毫秒。

URIEncoding URL統一編碼

其中和最大鏈接數相關的參數爲maxProcessors 和 acceptCount 。若是要加大併發鏈接數,應同時加大這兩個參數。

<Connector port="9027"   
                protocol="HTTP/1.1"  
                maxHttpHeaderSize="8192"  
                maxThreads="1000"  
                minSpareThreads="100"  
                maxSpareThreads="1000"  
                minProcessors="100"  
                maxProcessors="1000"  
                enableLookups="false"  
                URIEncoding="utf-8"  
                acceptCount="1000"  
                redirectPort="8443"  
                disableUploadTimeout="true"/>

maxThreads 和acceptCount生效狀況

maxThreads:tomcat起動的最大線程數,即同時處理的任務個數,默認值爲200

acceptCount:當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值爲100

狀況1:接受一個請求,此時tomcat起動的線程數沒有到達maxThreads,tomcat會起動一個線程來處理此請求。

狀況2:接受一個請求,此時tomcat起動的線程數已經到達maxThreads,tomcat會把此請求放入等待隊列,等待空閒線程。

狀況3:接受一個請求,此時tomcat起動的線程數已經到達maxThreads,等待隊列中的請求個數也達到了acceptCount,此時tomcat會直接拒絕這次請求,返回connection refused

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="800" acceptCount="1000"/>

 

3. 多個虛擬機

強烈建議不要使用 Tomcat 的虛擬主機,推薦每一個站點使用一個實例。即,能夠啓動多個 Tomcat,而不是啓動一個 Tomcat 裏面包含多個虛擬主機。由於 Tomcat是多線程,共享內存,任何一個虛擬主機中的應用崩潰,都會影響到全部應用程序。雖然採用多實例的方式會產生過多的開銷,但至少保障了應用程序的隔離和安全。

4. 壓縮傳輸

tomcat做爲一個應用服務器,也是支持 gzip 壓縮功能的。咱們能夠在 server.xml 配置文件中的 Connector 節點中配置以下參數,來實現對指定資源類型進行壓縮。

compression="on"             # 打開壓縮功能 
compressionMinSize="50"      # 啓用壓縮的輸出內容大小,默認爲2KB 
noCompressionUserAgents="gozilla, traviata"      # 對於如下的瀏覽器,不啓用壓縮 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些資源類型須要壓縮

Tomcat 的壓縮是在客戶端請求服務器對應資源後,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮並瀏覽。相對於普通的瀏覽過程 HTML、CSS、Javascript和Text,它能夠節省40% 左右的流量。更爲重要的是,它能夠對動態生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率也很高。可是, 壓縮會增長 Tomcat 的負擔,所以最好採用Nginx + Tomcat 或者 Apache + Tomcat 方式,將壓縮的任務交由 Nginx/Apache 去作。

Tomcat是根據瀏覽器請求頭中的accept-encoding來判斷瀏覽器是否支持 壓縮功能,若是這個值包含有gzip,就代表瀏覽器支持gzip壓縮內容的瀏覽

5. 管理AJP端口

AJP是爲 Tomcat 與 HTTP 服務器之間通訊而定製的協議,能提供較高的通訊速度和效率。若是tomcat前端放的是apache的時候,會使用到AJP這個鏈接器。因爲咱們公司前端是由nginx作的反向代理,所以不使用此鏈接器,所以須要註銷掉該鏈接器。

<!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->

6. 更改關閉 Tomcat 實例的指令

server.xml中定義了能夠直接關閉 Tomcat 實例的管理端口。咱們經過 telnet 鏈接上該端口以後,輸入 SHUTDOWN (此爲默認關閉指令)便可關閉 Tomcat 實例(注意,此時雖然實例關閉了,可是進程仍是存在的)。因爲默認關閉 Tomcat 的端口和指令都很簡單。默認端口爲8005,指令爲SHUTDOWN 。所以咱們須要將關閉指令修改複雜一點。

固然,在新版的 Tomcat 中該端口僅監聽在127.0.0.1上,所以你們也沒必要擔憂。除非黑客登錄到tomcat本機去執行關閉操做。

<Server port="8005" shutdow n="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">

7. 更改 Tomcat 的服務監聽端口

通常公司的 Tomcat 都是放在內網的,所以咱們針對 Tomcat 服務的監聽地址都是內網地址。

<Connector port="8080" address="172.16.100.1" />

8. 關閉war自動部署

默認 Tomcat 是開啓了對war包的熱部署的。爲了防止被植入木馬等惡意程序,所以咱們要關閉自動部署。

<Host name="localhost"  appBase=""
            unpackWARs="false" autoDeploy="false">

9. Tomcat性能優化

1.配置Tomcat運行內存;2.利用緩存和壓縮《利用nginx加速web訪問》;3.採用集羣《利用nginx+tomcat+memcached組建web服務器負載均衡》4.Tomcat的參數優化;5.改用APR庫

tomcat默認採用的BIO模型,在幾百併發下性能會有很嚴重的降低。tomcat自帶還有NIO的模型,另外也能夠調用APR的庫來實現操做系統級別控制。

<Connector port="80" protocol="HTTP/1.1"        connectionTimeout="20000"         redirectPort="8443" />

修改成

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol "   connectionTimeout="20000"     redirectPort="8443" />

NIO模型是內置的,調用很方便,只須要將上面配置文件中protocol修改爲org.apache.coyote.http11.Http11NioProtocol,重啓便可生效。上面配置我已經改過了,默認的是HTTP/1.1。

APR則須要安裝第三方庫,在高併發下會讓性能有明顯提高。

Tomcat的四種基於HTTP協議的Connector性能比較

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"                           connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443"/> 
<Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<Connector executor="tomcatThreadPool"
               port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

Connector按照順序命名爲 NIO, HTTP, POOL, NIOP

NIO HTTP POOL NIOP

281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363

10. 使用 Server JRE 替代JDK

服務器上不要安裝JDK,請使用 Server JRE. 服務器上根本不須要編譯器,代碼應該在Release服務器上完成編譯打包工做。

理由:一旦服務器被控制,能夠防止在其服務器上編譯其餘惡意代碼並植入到你的程序中。

11. Tomcat 安全配置

1. 禁用Tomcat管理頁面,刪除webapps下面的全部代碼,刪除conf/Catalina/localhost/下的host-manager.xml和manager.xml這兩個文件。

rm -rf /srv/apache-tomcat/webapps/*

2. 註釋或刪除 tomcat-users.xml 全部用戶權限

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
</tomcat-users>

3. 隱藏Tomcat版本信息

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
				maxThreads="8192"
				minSpareThreads="64"
				maxSpareThreads="128"
				acceptCount="128"
				enableLookups="false"
                server="Neo App Srv 1.0"/>

4. 啓動用戶與端口

建立一個用戶,這個用戶只用於啓動Tomcat

groupadd -g 80 daemon
adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon
chown daemon:daemon -R /srv/*
su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

應用程序的部署和Tomcat啓動不能使用同一用戶(tomcat被植入web shell程序時,不能建立或編輯應用程序目錄下任何內容)

5. 關閉自動部署

unpackWARs="false" autoDeploy="false";防止被植入木馬等惡意程序

6. JSESSIONID

修改 Cookie 變量 JSESSIONID, 這個cookie 是用於維持Session關係。建議你改成PHPSESSID。

7. 超時自動退出

查看tomcat配置文件server.xml是否有設置connectionTimeout值,設置帳戶自動登出。

session超時失效設置

<session-config>  
        <session-timeout>30</session-timeout>  
</session-config>

8. 自定義錯誤頁面

<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.html</location>
</error-page>

9. 禁止列目錄(高版本默認已禁止)

編輯tomcat/conf/web.xml配置文件

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

當WEB目錄中沒有默認首頁如index.html,index.jsp等文件時,不會列出目錄內容,直接訪問http://ip:8800/webadd。

10. 配置httponly

可在conf/context.xml配置文件中配置

<Context useHttpOnly="true"></context>

而且修改tomcat/conf/web.xml配置文件

<session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
        </cookie-config>
</session-config>

11. 配置cookie加密傳輸

在web.xml中sesion-config節點配置cookie-config中secure屬性,此配置只容許cookie在加密方式下傳輸。只有當使用https協議鏈接時cookie才能夠被頁面訪問.

<session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
            <secure>true</secure>
        </cookie-config>
</session-config>

12. HTTPS加密協議

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11Protocol" 
           maxThreads="150" 
           SSLEnabled="true" 
           scheme="https" 
           secure="true" 
           clientAuth="false" 
           sslProtocol="TLS" />
相關文章
相關標籤/搜索