Tomcat 運行環境介紹
1.Tomcat 自己沒法直接在計算機上運行,須要依賴硬件基礎上的操做系統和Java虛擬機;
2.Java 程序啓動時JVM都會分配一個初始內存和最大內存給這個應用;
3.當應用程序用到最大內存的時刻,就會觸發JVM作垃圾回收(GC)動做,釋放被佔用的內存;
4.所以想要調整Java程序啓動時的初始內存和最大內存,須要向JVM申請;
5.若是初始內存大小設置太小,且此時初始化的應用對象過多,虛擬機就必須重複的加載內存來知足使用;
6.基於以上緣由,最好把初始內存大小(Xms)和最大內存(Xmx)設置成同樣;
7.JVM上全部的對象都在"""堆區(heap)"""上分配內存(也有在"棧"上分配內存的)
8.堆區的大小是能夠動態擴展的,但"""堆"""的大小受限於系統使用的物理內存,當應用程序須要的內存超出"堆"的最大值時,JVM虛擬機就會拋出內存溢出異常,而且致使應用程序奔潰;
9.基於以上緣由,建議「堆」的大小設置成物理內存的80%javascript
Tomcat內存優化主要是對 tomcat 啓動參數優化,咱們能夠在 tomcat 的啓動腳本 catalina.sh 中設置 java_OPTS 參數。css
JAVA_OPTS參數說明 -server 啓用jdk 的 server 版; -Xms java虛擬機初始化時的最小內存; -Xmx java虛擬機可以使用的最大內存; -XX: PermSize 內存永久保留區域 -XX:MaxPermSize 內存最大永久保留區域
建議配置:html
對於服務器內存2G來講 ,因此能夠採起如下配置: JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’ 配置完成後可重啓Tomcat ,經過如下命令進行查看配置是否生效: 看到Tomcat 進程號是 15242 。 查看是否配置生效: sudo jmap – heap 15242 咱們能夠看到MaxHeapSize 等參數已經生效。
調整鏈接器connector的併發處理能力;在Tomcat 配置文件 server.xml 中的java
<Connector port="9027" protocol="HTTP/1.1" maxHttpHeaderSize="8192" minProcessors="100" maxProcessors="1000" acceptCount="1000" redirectPort="8443" disableUploadTimeout="true"/>
參數說明:web
maxThreads 客戶請求最大線程數
minSpareThreads Tomcat初始化時建立的 socket 線程數
maxSpareThreads Tomcat鏈接器的最大空閒 socket 線程數
enableLookups 若設爲true, 則支持域名解析,可把 ip 地址解析爲主機名
redirectPort 在須要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 端口
acceptAccount 監聽端口隊列最大數,滿了以後客戶請求會被拒絕(不能小於maxSpareThreads )
connectionTimeout 鏈接超時
minProcessors 服務器建立時的最小處理線程數
maxProcessors 服務器同時最大處理線程數
URIEncoding URL統一編碼
打開tomcat的壓縮功能;tomcat的壓縮優化就是將返回的html頁面等內容通過壓縮,壓縮成gzip格式以後,發送給瀏覽器,瀏覽器在本地解壓縮的過程。數據庫
<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"/>
其中:瀏覽器
●compression="on" 打開壓縮功能 ●compressionMinSize="2048"啓用壓縮的輸出內容大小,默認爲2KB ●noCompressionUserAgents="gozilla,traviata" 對於如下的瀏覽器,不啓用壓縮 ●compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型須要壓縮
緩存策略:緩存
開啓瀏覽器的緩存,這樣讀取存放在webapps文件夾裏的靜態內容會更快,大大推進總體性能。tomcat
①瀏覽器第一次請求tomcat服務器某資源 ②tomcat查詢到該資源,並將該資源最後修改的時間保存在響應頭的Last-Modified中 (Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT) ③瀏覽器第二次訪問tomcat請求該資源,並將以前該資源的最後修改時間放入If-Modified-Since請求頭中 ④服務器收到該請求,比較該請求中的If-Modified-Since與資源最後修改時間Last-Modified是否一致,若是一致則不向其發送該資源並向其發送響應代碼304告訴其去本地取緩存。
#降權啓動安全
以普通用戶啓動tomcat,降權啓動,防止不法分子經過tomcat得到root權限。
#修改端口號
修改tomcat配置文件server.xml中的全球人都知道的http鏈接器端口號,防止黑客攻擊。
#更改關閉Tomcat的指令
這個端口是有安全隱患的,直接Telnet遠程鏈接主機,輸入shutdown便可關閉tomcat。
shown端口是寫在Server參數裏的,直接去掉是無論用,也是會默認啓動的,通常在安全設置時候建議把端口修改成其餘端口,shutdown修改成其餘複雜字串。實際上這個端口是能夠直接屏蔽不監聽的。設置時候將其port值修改成-1便可:
<Server port="-1" shutdown="SHUTDOWN">
#修改管理員用戶名,密碼
修改tomcat-user.xml中默認的Manager用戶名和密碼
<?xml version=’1.0’ encoding=’utf-8’?> <tomcat-users> <role rolename=」manager」/> <user username=」temobi」 password=」temobi8090」 roles=」manager」/> </tomcat-users>
#清空站點目錄下ROOT下管理頁面等文件
ROOT下有一些站點的管理程序能夠查看tomcat的各類信息及配置,所以咱們須要清空這些文件或者將站點目錄更改。
生產環境通常不適用Tomcat默認的管理界面,這些頁面存放在Tomcat 的webapps安裝目錄下, 把該目錄下的全部文件刪除便可:rm -rf /usr/local/tomcat8/webapps/*
Tomcat性能在等待數據庫查詢被執行期間會下降。現在大多數應用程序都是使用可能包含「命名查詢」的關係型數據庫。若是是那樣的話,Tomcat會在啓動時默認加載命名查詢,這個可能會提高性能。
另外一件重要事是確保全部數據庫鏈接正確地關閉。給數據庫鏈接池設置正確值也是十分重要的。我所說的值是指Resource要素的最大空閒數(maxIdle),最大鏈接數(maxActive),最大創建鏈接等待時間(maxWait)屬性的值。
由於配置依賴與應用要求,我也不能在本文指定正確的值。你能夠經過調用數據庫性能測試來找到正確的值。
#錯誤頁面優雅顯示
#隱藏版本號
#禁用DNS查詢
當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者經過域名服務器查找機器名轉換爲IP地址。DNS查詢須要佔用網絡,而且包括可能從不少很遠的服務器或者不起做用的服務器上去獲取對應的IP的過程,這樣會消耗必定的時間。
爲了消除DNS查詢對性能的影響咱們能夠關閉DNS查詢,方式是修改server.xml文件中的enableLookups參數值改成false:enableLookups="false"
#設置session過時時間
Tomcat採用數據庫鏈接池技術,當用戶在必定時間不對數據庫有操做時間後,就自動關閉這個鏈接,這是爲了更好的利用資源,防止浪費寶貴的數據庫鏈接資源。
如下是設置session時間的3個方法: 1. 在tomcat——>conf——>servler.xml文件中定義: <Context path="/test" docBase="/test" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/> defaultSessionTimeOut="3600" 2. 項目所在目錄下的 web.xml中定義: <session-config> <session-timeout>20</session-timeout> </session-config> 3. 在程序中定義: session.setMaxInactiveInterval(30*60); 設置單位爲秒,設置爲-1永不過時