您好,登錄后才能下訂單哦!
本篇內容介紹了“Tomcat用戶管理的優化怎么配置”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在tomcat-users.xml中添加用戶:
<role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
點擊server status 輸入用戶名密碼可以查看服務器的狀態
1、服務器信息
2、JVM的信息 (默認的這些值都很低,我們可以配置)
PS Eden Space:JVM的年輕代。 一個對象new 出來后會在Eden Space,直到GC到來,GC會逐一問清楚每個對象是否存在引用,進入Survivor Space(幸存區),沒有引用將被kill。
PS Old Gen:JVM的老年代。
PS Survivor Space:幸存區。幸存者區的對象可以活段時間,GC會定期(可以自定義)會對這些對象進行訪問,如果該對象的引用不存在了將被kill,如果每次訪問該對象都存在引用,將被轉移到老年代。(用于保存在eden space內存池中經過垃圾回收后沒有被回收的對象。)
Code Cache:代碼緩存區。HotSpot Java虛擬機包括一個用于編譯和保存本地代碼(native code)的內存。
PS Perm Gen:永久代。
1、BIO(阻塞式):tomcat的默認模式,該模式性能較低,沒有經過任何優化處理和支持,一個線程處理一個請求。缺點:并發量過大時,線程數較多,浪費資源。tomcat7及以下版本,在linux系統中默認使用該模式。
2、NIO-Non-blocking IO(非阻塞IO):Java NIO可以讓你非阻塞的使用IO,例如:當線程從通道讀取數據到緩沖區時,線程還是可以進行其他事情。當數據被寫入到緩沖區時,線程可以繼續處理它。從緩沖區寫入通道也類似。Tomcat8在Linux系統中默認使用這種方式。
3、APR:Apache Portable Runtime,從操作系統層面解決io阻塞問題。Tomcat7或Tomcat8在Win7或以上的系統中啟動默認使用這種方式。Linux如果安裝了apr和native,Tomcat直接啟動就支持apr。
(安裝方法:http://www.5655pk.com/os/78408.html)
查看tomcat的啟動模式:
修改tomcat的運行模式:
將<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> protocol="HTTP/1.1" 修改為NIO模式
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
修改后:
ps:這就是tomcat優化第一步,優化tomcat的運行模式
3、http信息
tomcat默認是沒有啟用線程池的,在tomcat中每一個用戶請求都是一個線程,所以我們可以使用線程池來提高性能。tomcat的前段有一個調度線程,會將用戶的請求放入線程池中,一定時間后線程池中的用戶請求任務就變為工作線程。
1、開啟線程池:打開server.xml中關于線程池的配置
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="600" minSpareThreads="10"/>
重要參數說明:
name
:共享線程池的名字。這是Connector為了共享線程池要引用的名字,該名字必須唯一。默認值:None;
namePrefix
:在JVM上,每個運行線程都可以有一個name 字符串。這一屬性為線程池中每個線程的name字符串設置了一個前綴,Tomcat將把線程號追加到這一前綴的后面。默認值:tomcat-exec-;
maxThreads
:該線程池可以容納的最大線程數。默認值:200;
maxIdleTime
:在tomcat關閉一個空閑線程之前,允許空閑線程持續的時間(以毫秒為單位)。只有當前活躍的線程數大于minSpareThread的值,才會關閉空閑線程。默認值:60000(一分鐘)。
minSpareThreads
:Tomcat應該始終打開的最小不活躍線程數。默認值:25。
2、引用線程池
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
PS:Connector 的一份最優配:一般情況下我們不使用Executor開啟線程池,我們在Connector上直接配置
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="1000" minSpareThreads="100" acceptCount="1000" maxConnections="1000" connectionTimeout="20000" maxHttpHeaderSize="8192" tcpNoDelay="true" compression="on" disableUploadTimeout="true" redirectPort="8443" enableLookups="false" URIEncoding="UTF-8" />
maxThreads:最大線程數
minSpareThreads:最小線程數
acceptCount:接受最大隊列長度
maxConnections:最大連接數
connectionTimeout:超時等待時間 毫秒
maxHttpHeaderSize:請求頭最大值
tcpNoDelay:如果為true,服務器socket會設置TCP_NO_DELAY選項,在大多數情況下可以提高性能。缺省情況下設為true
compression:是否開啟壓縮GZIP on開啟 off 關閉 forde:所有情況下都壓縮
disableUploadTimeout:限定上傳時間
enableLookups:關閉DNS反向查詢,DNS反查很耗時間
AJP:協議是一個面向包的。web服務器和servlet容器通過TCP鏈接進行交互,為了節省SOCKET創建的昂貴代價,WEB服務器會嘗試維護一個永久TCP鏈接到Servlet容器,并在多個請求和響應周期過程會重用鏈接。
web客戶1訪問tomcat服務器的 資源index.jsp 是可以直接訪問的,如果我們訪問的是靜態資源,tomcat是不方便處理的它會把這些靜態資源返回給Apache服務器,由他們返回給用戶,所以tomcat服務器相對于nginx服務器在處理靜態資源上效率較低。因此我們的網站服務器一般是Nginx+tomcat,nginx負責處理靜態資源,因此AJP 協議我們在使用nginx+tomcat架構時可以關閉它來進行效率的優化。
注釋tomcat中server.xml中<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 即可。
對jvm參數的優化我們主要是對堆內存的優化,堆內存分為三大塊年輕代、老年代、永久代。
如何分配這三個區域的大小:
如果我們的需求需要經常創建對象,且使用完畢后馬上會被回收,這樣的場景我們可以給年輕代分配較大空間。例如:對外提供一個查詢接口,返回json數據,這個接口被頻繁的調用,我們可以將這個服務的年輕代空間調大。
靜態變量較多時可以將老年代空間設置大一些。
1、設置堆內存大小
-Xms:JVM啟動初始化內存
-Xmx:JVM的最大堆內存,在JVM啟動以后會分配-Xmx參數指定的內存空間作為堆內存,但是不一定會全部使用,JVM會根據-Xmx參數來調整真正用于JVM的內存。
-Xmx 、-Xms之間的差值就是三個Virtual空間的大小。
2、年輕代
-xx:NewRatio=8 表示老年代與年輕代的比值是8:1
-XX:SurvivorRatio=32 表示eden與survivor的比值是32:1
-Xmn 表示設置年輕代的大小
3、永久代
-XX:PermSize=16m -XX:MaxPermSize=64M
4、Thread Stack(線程區)
-XX:Xss=128k
修改tomcat bin目錄下catalina.bat 或者catalina.sh文件,修改內容如下
windows下 catalina.bat
rem --------------------------------------------------------------------------- set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC setlocal
Linux下catalina.sh
# ----------------------------------------------------------------------------- JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC" # OS specific support. $var _must_ be set to either true or false.
參數說明:
#-Dfile.encoding:默認文件編碼 #-Xms512m 設置JVM的最小內存為512m,此值可以設置與-Xmx相同以此避免每次垃圾回收完成后JVM重新分配內存。 #-Xmx1024 設置JVM的最大可用內存 #-XX:NewSize 設置年輕代大小 #-XX:MaxNewSize 設置年輕代最大內存大小 #-XX:PermSize 設置永久代大小 #-XX:MaxPermSize 設置永久代最大內存 #-XX:NewRatio=2 設置年輕代與老年代的比值 2 :表示年輕代與老年代的比值是1:2 #-XX:MaxTenuringThreshold 這種垃圾的最大年齡,默認是15 。 0:表示年輕代不經過Survivor區直接進入老年代,對于老年代較多的應用,設置為0可以提高效率。如果該值較大表示年輕代的對象會在Survivor區進行多次復制,以此增加對象在年輕代的存活時間,增加在年輕代被回收的概率。 #XX:+DisableExplicitGC 應用程序將忽略收到調用GC的代碼。及System.GC()是一個空調用。
“Tomcat用戶管理的優化怎么配置”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。