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