03 . Tomcat的經常使用設置及優化

Tomcat的經常使用設置

當咱們公司使用tomcat做爲web應用服務器的規模愈來愈大,爲保證Tomcat配置安全,防止信息泄露,惡意攻擊以及配置的安全規範,特制定此Tomcat安全配置規範.本文章從別處轉載並作了補充javascript

Tomcat用戶設置
useradd -d /tomcat -u 501 tomcat
echo "123" |passwd --stdin tomcat
su - tomcat
id tomcat
# uid=501(tomcat) gid=1000(tomcat) groups=1000(tomcat)
pwd
# /tomcat
Tomcat配置
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.55/bin/apache-tomcat-8.5.55.tar.gz

tail -5 .bash_profile
JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CATALINA_HOME=/usr/local/tomcat
應用程序配置
mkdir webapps
tar xvf apache-tomcat-8.5.55.tar.gz -C /tomcat/webapps/
/tomcat/webapps/apache-tomcat-8.5.55/bin/startup.sh

安全設置規範

telnet管理端口保護(強制)

ajp連接端口保護(推薦)

禁用管理端(強制)

tomcat/webapps/*

tomcat/conf/tomcat-user.xml
降權啓動(強制)

文件列表訪問控制(強制)

版本信息隱藏(強制)

Server header重寫(推薦)

訪問限制(可選)

起停腳本權限回收(推薦)

chmod 744 –R tomcat/bin/*
訪問日誌格式規範(推薦)

屏蔽DNS查詢

enableLookups: 調用request,getRemoteHost()執行DNS查詢,以返回遠程主機的主機名,若是設置爲false,css

<Connector enableLookups="false"/>
壓縮管理

tomcat做爲一個應用服務器,也是支持 gzip 壓縮功能的。咱們能夠在 server.xml 配置文件中的 Connector 節點中配置以下參數,來實現對指定資源類型進行壓縮。 前端使用nginx做爲反向代理,通常不須要啓用tomcat壓縮功能。html

compression="on" # 打開壓縮功能

compressionMinSize="50" # 啓用壓縮的輸出內容大小,默認爲2KB

noCompressionUserAgents="gozilla, traviata" # 對於如下的瀏覽器,不啓用壓縮

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些資源類型須要壓縮
server.xml配置
<Server port="8527" shutdown=" dangerous">

<!--Define a non-SSL HTTP/1.1Connector on port 8080-->
<Connector port="8080" server="webserver"/>

<!--Define an AJP 1.3Connector on port 8528-->
<!--Define an accesslog -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>

<Connector port="8528" protocol="AJP/1.3"/>

<Context path="" docBase="/home/work/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true"/>
web.xml配置
<init-param>
       <param-name>listings</param-name>
       <param-value>false</param-value>
</init-param>

<error-page>
       <error-code>403</error-code>
       <location>/forbidden.jsp</location>
</error-page>
<error-page>
       <error-code>404</error-code>
       <location>/notfound.jsp</location>
</error-page>
<error-page>
       <error-code>500</error-code>
       <location>/systembusy.jsp</location>
</error-page>

安全優化

# 降權啓動
# telnet管理端口保護
# ajp連接端口保護
# 禁用管理端

# 能夠看上面

Tomcat自己優化前端

# 1.首先對代碼進行動靜分離,讓Tomcat只負責Jsp文件的解析工做。
# 2.Connector鏈接器配置:
# Bio,Nio和APR,三種方式性能差異很大,APR性能最好;

性能優化

屏蔽DNS查詢
<Connector  port="8081" protocol="HTTP/1.1" connectionTimeout="6000" enableLookups="false" acceptCount="800" redirectPort="8443" />
JVM調優

Tomcat最吃內存,只要內存足夠,就跑的快, 可是據說超過32G可能性能有些不穩定,能夠開多實例java

.nginx

若是系統資源有限,那就須要條魚哦,提升資源使用率web

.shell

優化catalina.sh配置文件,再catlina.sh配置文件添加以下代碼apache

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"
server:必定要做爲第一個參數,在多個CPU時性能佳
-Xms:初始堆內存Heap大小,使用的最小內存,cpu性能高時此值應設的大一些
-Xmx:初始堆內存heap最大值,使用的最大內存
上面兩個值是分配JVM的最小和最大內存,取決於硬件物理內存的大小,建議均設爲物理內存的一半。
-XX:PermSize:設定內存的永久保存區域
-XX:MaxPermSize:設定最大內存的永久保存區域
-XX:MaxNewSize:
-Xss 15120 這使得JBoss每增長一個線程(thread)就會當即消耗15M內存,而最佳值應該是128K,默認值好像是512k.
+XX:AggressiveHeap 會使得 Xms沒有意義。這個參數讓jvm忽略Xmx參數,瘋狂地吃完一個G物理內存,再吃盡一個G的swap。
-Xss:每一個線程的Stack大小
-verbose:gc 現實垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日誌文件
-Xmn:young generation的heap大小,通常設置爲Xmx的三、4分之一
-XX:+UseParNewGC :縮短minor收集的時間
-XX:+UseConcMarkSweepGC :縮短major收集的時間

設置JVM相關運行的參數瀏覽器

1.32位系統jvm對內存限制不能突破2G,

2.-server: 第一個參數,多個CPU時性能佳,還有一種-client的模式,特色是啓動速度比較快,但運行時性能和內存管理效率不高,一般用於客戶端應用程序或者開發調試,32位環境默認該模式。 server模式特色: 啓動速度比較慢,但運行時性能和內存管理效率很高,適用於生產環境,64位jdk環境默認該模式;

3.-Xms: 表示java初始化堆的大小,-Xms與-Xmx設定同樣的值,避免JVM反覆申請內存,致使性能大起大落,默認爲物理內存物理內存1/64,,默認空閒堆內存小於40%,jvm就會增大堆直到-Xmx的最大限制;

4.-Xmx: 表示最大java堆大小,當應用程序須要的內存超過堆的最大值就會提示內存溢出,而且致使應用服務器崩潰,所以通常建議最大值設置爲可用內存最大值的80%;
使用java -Xmx512M -version命令測試,逐步增大512值,執行正常就表示指定的內存大小可用,不然打印錯誤信息;

5.-Xss: 表示每一個java線程堆棧大小,JDK5.0之後每一個線程堆棧大小爲1M,之前每一個線程堆棧大小爲256k,根據應用線程所需內存大小進行調整,相同物理內存下,減小這個值能生成更多的線程,可是操做系統對一個進程內的線程數有限制,通常小的應用,若是棧不是很深,128k夠用的,大的256或512,通常不易超過1M,要否則容易出現out ofmemory,性能影響很大,須要嚴格測試;

Tomcat內存優化

Tomcat內存優化主要是對tomcat啓動參數優化,咱們能夠在tomcat的啓動腳本 catalina.sh設置java_OPTS參數

JAVA_OPTS參數說明

-server 啓用jdk 的 server 版;
-Xms java虛擬機初始化時的最小內存;
-Xmx java虛擬機可以使用的最大內存;
-XX: PermSize 內存永久保留區域
-XX:MaxPermSize 內存最大永久保留區域

Tomcat配置優化

server.xml優化,大大提升Tomcat處理請求的能力

1.默認配置下,Tomcat會爲每一個鏈接器建立一個綁定的線程池,最大200,服務器啓動默認建立5個空閒進程隨時等待用戶請求。

2.Tomcat7在開啓線程池前,必定要安裝Apr庫,並能夠啓用,不然有錯誤報出,shutdown.sh腳本沒法關閉進程;

3.最大線程500,根據本身實際狀況合理設置,越大越耗費內存和CPU,由於CPU疲於線程上下文切換,沒有精力提供服務了,最小空閒線程數20,線程最大空閒時間60秒,容許最大線程數還受制於操做系統的內核參數設置,根據本身需求和環境;

4.Connection<肯萊克行> Timeout; 網絡鏈接超時,設置爲0表示永不超時,有隱患,一般30000毫秒,根據實際狀況,適當修改;

5.DisableUploadTimout: <滴雖播,啊譜樓的,> 上傳時是否啓用超時機制;

6.ConnectionUploadTimeout: <>上傳超時時間,根據業務本身調,

7.keepalive<K普林>timeout: 表示下次請求過來以前,Tomcat保持該鏈接多久,通常使用Connection Timeout時間8.compression: 是否對響應數據進行Gzip壓縮,壓縮後數據能夠有效減小頁面大小,通常能夠減小1/3左右,節省寬帶;

9.compression<肯坡遜 >MinSize: 表示壓縮響應的最小值,只有當響應報文大小大於這個值的時候纔會對報文進行壓縮;指定壓縮類型,對那些類型文件進行數據壓縮,可是配置了動靜分離,也就不須要配置壓縮了;由於靜態頁面和圖片錄音數據不須要Tomcat處理了;

服務器參數配置

現公司服務器內存通常能夠加到最大2G,因此能夠採起如下配置:

JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
Tomcat併發優化

1 . Tomcat鏈接相關參數

在Tomcat配置文件的server.xml中的

<Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  minProcessors="100"
  maxProcessors="1000"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>

2 . 調整鏈接器connector的併發鏈接能力

  1>參數說明
  maxThreads 客戶請求最大線程數 
  minSpareThreads Tomcat初始化時建立的 socket 線程數 
  maxSpareThreads Tomcat鏈接器的最大空閒 socket 線程數 
  enableLookups 若設爲true, 則支持域名解析,可把 ip 地址解析爲主機名 
  redirectPort 在須要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口 
  acceptAccount 監聽端口隊列最大數,滿了以後客戶請求會被拒絕(不能小於maxSpareThreads ) 
  connectionTimeout 鏈接超時 
  minProcessors 服務器建立時的最小處理線程數 
  maxProcessors 服務器同時最大處理線程數 
  URIEncoding URL統一編碼
  
  2>Tomcat中的配置示例
  <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"/>

3 . Tomcat緩存優化

1>參數說明
  c ompression 打開壓縮功能 
  compressionMinSize 啓用壓縮的輸出內容大小,這裏面默認爲2KB 
  compressableMimeType 壓縮類型 
  connectionTimeout 定義創建客戶鏈接超時的時間. 若是爲 -1, 表示不限制創建客戶鏈接的時間

   2>Tomcat中的配置示例
  <Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="100"
  maxSpareThreads="1000"
  minProcessors="100"
  maxProcessors="1000"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>

參考配置

參考舊的配置

  <Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="25"
  maxSpareThreads="75"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="200"
  redirectPort="8443"
  disableUploadTimeout="true" />
  後來發如今訪問量達到3 百萬多的時候出現性能瓶頸。 
  2>更改後的配置
  <Connector port="9027"
  protocol="HTTP/1.1"
  maxHttpHeaderSize="8192"
  maxThreads="1000"
  minSpareThreads="100"
  maxSpareThreads="1000"
  minProcessors="100"
  maxProcessors="1000"
  enableLookups="false"
  compression="on"
  compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  connectionTimeout="20000"
  URIEncoding="utf-8"
  acceptCount="1000"
  redirectPort="8443"
  disableUploadTimeout="true"/>
相關文章
相關標籤/搜索