Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域_第1頁
Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域_第2頁
Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域_第3頁
Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域_第4頁
Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域Tomcat優(yōu)化JVM運(yùn)行時(shí)內(nèi)存區(qū)域目錄Tomcat內(nèi)存溢出Tomcat性能優(yōu)化hn-kehongJava體系介紹Java運(yùn)行時(shí)內(nèi)存區(qū)域目錄Tomcat內(nèi)存溢出Tomcat性能優(yōu)化hn-kehonTomcat內(nèi)存溢出硬件、網(wǎng)絡(luò)帶寬以及服務(wù)端操作系統(tǒng)的選擇都會影響Tomcat的性能。hn-kehong1.OutOfMemoryError: Java heap space Java堆溢出 2.OutOfMemoryError: PermGen space 永久保存區(qū)域溢出Tomcat內(nèi)存溢出硬件、網(wǎng)絡(luò)帶寬以及服務(wù)端操作系統(tǒng)的選擇都Tomcat性能優(yōu)化hn-keh

2、ong1)OutOfMemoryError:Java heap spaceJVM堆的設(shè)置是指java程序運(yùn)行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動的時(shí)候會自動設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4??梢岳肑VM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和TenuredGeneraion 之和。Tomcat性能優(yōu)化hn-kehong1)OutOfMemoTomcat性能優(yōu)化hn-kehong2)OutOfMemoryError:Per

3、mGen space PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會被放到PermGen space中,它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運(yùn)行期對PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,這種錯(cuò)誤常見在web服務(wù)器對JSP進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三

4、方j(luò)ar, 其大小超過了jvm默認(rèn)的大小(4M)那么就會產(chǎn)生此錯(cuò)誤信息了。Tomcat性能優(yōu)化hn-kehong2)OutOfMemoTomcat性能優(yōu)化硬件、網(wǎng)絡(luò)帶寬以及服務(wù)端操作系統(tǒng)的選擇都會影響Tomcat的性能。hn-kehong由于Tomcat 的運(yùn)行依賴于 JVM,Tomcat的調(diào)整主要分為兩種(1)外部性能調(diào)整 調(diào)整非Tomcat 組件,如 Tomcat 運(yùn)行的操作系統(tǒng)和運(yùn)行Tomcat 的 Java 虛擬機(jī)。(2)自身性能調(diào)整 修改 Tomcat 自身的參數(shù),調(diào)整 Tomcat 配置文件中的參數(shù)。Tomcat性能優(yōu)化硬件、網(wǎng)絡(luò)帶寬以及服務(wù)端操作系統(tǒng)的選擇都Tomcat性能優(yōu)化

5、外部性能調(diào)整 hn-kehongTomcat 本身不能直接在計(jì)算機(jī)上運(yùn)行,需要依賴于硬件基礎(chǔ)之上的操作系統(tǒng)和一個(gè)Java 虛擬機(jī)。因次可以通過對JVM的優(yōu)化,來提高Tomcat的運(yùn)行效率1)JVM動態(tài)庫版本的選擇client : 針對桌面應(yīng)用優(yōu)化 特點(diǎn):加載速度快server: 針對服務(wù)器應(yīng)用優(yōu)化 特點(diǎn):加載速度較慢,運(yùn)行速度快注意! jvm client 中能運(yùn)行的程序有可能在jvm server中運(yùn)行出錯(cuò) ,所以這樣的話最好在開發(fā)、測試階段都使用jvm server ,保持和服務(wù)器相同。因此種問題目前不太常見,或者可在部署前利用server版進(jìn)行驗(yàn)證測試后部署。Tomcat性能優(yōu)化 外部性

6、能調(diào)整 hn-kehongTomcat性能優(yōu)化 外部性能調(diào)整 hn-kehongTomcat 本身不能直接在計(jì)算機(jī)上運(yùn)行,需要依賴于硬件基礎(chǔ)之上的操作系統(tǒng)和一個(gè)Java 虛擬機(jī)。因次可以通過對JVM的優(yōu)化,來提高Tomcat的運(yùn)行效率JVM動態(tài)庫版本切換方法 修改 %JAVA_HOME%/jre/lib/i386/jvm.cfg 文件Tomcat性能優(yōu)化 外部性能調(diào)整 hn-kehongTomcat性能優(yōu)化 外部性能調(diào)整 hn-kehong2)JVM內(nèi)存設(shè)置可以通過 java -XmxXXXXM version 命令 測試JVM支持的最大內(nèi)存 如果執(zhí)行正常就表示指定的內(nèi)存大小可用,否則會打印錯(cuò)

7、誤信息JVM初始化堆的大小 -Xms: 虛擬機(jī)在啟動時(shí)向系統(tǒng)申請的內(nèi)存的大小。使用于應(yīng)用程序在大負(fù)載的情況下會急劇地占用更多的內(nèi)存,如果虛擬機(jī)啟動時(shí)設(shè)置使用的內(nèi)存比較小而在這種情況下有許多對象進(jìn)行初始化,虛擬機(jī)就必須重復(fù)地增加內(nèi)存來滿足使用。一般把-Xms 和-Xmx 設(shè)為一樣大。JVM堆的最大值 Xmx : 受限于系統(tǒng)可使用的物理內(nèi)存,使用于數(shù)據(jù)量較大的應(yīng)用程序會使用持久對象,內(nèi)存使用有可能迅速增長當(dāng)應(yīng)用程序需要的內(nèi)存超出堆的最大值時(shí)虛擬機(jī)就會提示內(nèi)存溢出,并且導(dǎo)致應(yīng)用服務(wù)崩潰。一般建議堆的最大值設(shè)置為可用內(nèi)存的最大值的 80%。Tomcat性能優(yōu)化 外部性能調(diào)整 hn-kehongTomc

8、at性能優(yōu)化 外部性能調(diào)整 hn-kehong2)JVM內(nèi)存設(shè)置 Tomcat 默認(rèn)可以使用的內(nèi)存為128MB; 初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。startup.bat啟動方式: 在文件tomcat_home/bin/catalina.bat 最前面添加 set JAVA_OPTS=-Xms128m -Xmx350m windows服務(wù)啟動方式 執(zhí)行的是bintomcat.exe.他讀取注冊表中的值,而不是catalina.bat的設(shè)置. 修改注冊表HKEY_LOCAL_MACHINESOFTWAREApache Software Found

9、ationProcrun 2.0Tomcat6ParametersJavaOptions 重起tomcat服務(wù),設(shè)置生效。Tomcat安裝方式:1.“開始”-“Apache Tomcat 6”-“Configure Tomcat”2.選擇 Java 標(biāo)簽,在“Initial memory pool (初始內(nèi)存)”和“Maximum memory pool (最大內(nèi)存)”中輸入你需要的內(nèi)存參數(shù)即可。 Tomcat性能優(yōu)化 外部性能調(diào)整 hn-kehongTomcat性能優(yōu)化 外部性能調(diào)整 hn-kehong2)JVM內(nèi)存設(shè)置 要加“m”說明是MB,否則就是KB了,在啟動tomcat時(shí)會報(bào)內(nèi)存不足

10、。-Xms:初始值-Xmx:最大值-Xmn:最小值Java 提供的垃圾回收機(jī)制。 虛擬機(jī)的堆大小決定了虛擬機(jī)花費(fèi)在收集垃圾上的時(shí)間和頻度。如果堆很大,那么完全垃圾收集就會很慢,但是頻度會降低。如果堆的大小和內(nèi)存的需要一致,完全收集就很快,但是會更加頻繁。調(diào)整堆大小的的目的是最小化垃圾收集的時(shí)間,以在特定的時(shí)間內(nèi)最大化處理客戶的請求。Tomcat性能優(yōu)化 外部性能調(diào)整 hn-kehongTomcat性能優(yōu)化 外部性能調(diào)整 hn-kehong5)Tomcat與web服務(wù)器整合雖然 Tomcat 也可以作 Web 服務(wù)器,但處理靜態(tài) html 的速度比不上 Apache, 且其作為 Web 服務(wù)器的

11、功能遠(yuǎn)不如 Apache,因此我們想把 Apache 和 T omcat 集成起來,將 html與 JSP 的功能部分進(jìn)行明確分工,讓Tomcat只處理 JSP 部分,他的由 Apache、IIS 等這些 Web 服務(wù)器處理,由此大大節(jié)省了 Tomcat 有限的工作“線程” 。6)Tomcat負(fù)載均衡 可以通過配置 T omcat 與 Apache 進(jìn)行負(fù)載平衡, 來提高 T omcat 的服務(wù)性能。Tomcat性能優(yōu)化 外部性能調(diào)整 hn-kehongTomcat性能優(yōu)化 自身性能優(yōu)化 hn-kehong1)禁用 DNS 查詢 當(dāng) Web 應(yīng)用程序記錄客戶端的信息時(shí),它也會記錄客戶端的 IP

12、 地址或者通過域名服務(wù)器查找機(jī)器名轉(zhuǎn)換為 IP 地址。 DNS 查詢需要占用網(wǎng)絡(luò),并且可能從很多很遠(yuǎn)的服務(wù)器或者不起作用的服務(wù)器上去獲取對應(yīng)的 IP, 這樣會消耗一定的時(shí)間。為了消除 DNS 查詢對性能的影響,可以關(guān)閉 DNS 查詢。方法是修改 server.xml 文件中的 enableLookups 參數(shù)值。關(guān)閉不僅節(jié)省了網(wǎng)絡(luò)帶寬、查詢時(shí)間和內(nèi)存,而且更小的流量也會使日志數(shù)據(jù)變得更少, 顯而易見也節(jié)省了硬盤空間。對流量較小的站點(diǎn)來說禁用 DNS 查詢可能沒有大流量站點(diǎn)的效果明顯。Tomcat性能優(yōu)化 自身性能優(yōu)化 hn-kehongTomcat性能優(yōu)化 自身性能優(yōu)化 hn-kehong2)

13、線程數(shù)配置 基本上可以解決連接數(shù)過大引起的死機(jī)。具體數(shù)值可跟據(jù)實(shí)際情況設(shè)置maxThreads / 最大線程數(shù)minSpareThreads / 初始化時(shí)創(chuàng)建的線程數(shù)maxSpareThreads / 一旦創(chuàng)建的線程超過這個(gè)值,Tomcat 就會關(guān)閉不再需要 的 socket 線程。acceptCount / 指定當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時(shí),可 以放到處理隊(duì)列中的請求數(shù),超過這個(gè)數(shù)的請求將不予處理 connnectionTimeout/ 網(wǎng)絡(luò)連接超時(shí)時(shí)間,單位毫秒。設(shè)置為 0 表示永不超時(shí), 這樣設(shè)置有隱患的。通??稍O(shè)置為 30000 毫秒Tomcat性能優(yōu)化 自身性能優(yōu)化 h

14、n-kehongTomcat性能優(yōu)化 自身性能優(yōu)化 hn-kehong2)線程數(shù)配置 配置公用線程池 多個(gè) connector 公用 1 個(gè)線程池。Tomcat性能優(yōu)化 自身性能優(yōu)化 hn-kehongJava虛擬機(jī)hn-kehongJava不僅僅是一門編程語言,它還是一個(gè)由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系。提供完整的用于軟件開發(fā)和跨平臺部署的支持環(huán)境,并廣泛用于嵌入式系統(tǒng)、移動終端、企業(yè)服務(wù)器和大型機(jī)等各種場合。 Sun官方定義的Java技術(shù)體系包括以下幾個(gè)部分: 認(rèn)識Java體系java程序設(shè)計(jì)語言各種硬件平臺上的Java虛擬機(jī)Class文件格式Java API類庫來自商業(yè)機(jī)構(gòu)和開源社

15、區(qū)的第三方Java類庫Java虛擬機(jī)hn-kehongJava不僅僅是一門編程語言Java虛擬機(jī)hn-kehongJava技術(shù)體系所包括的內(nèi)容Java虛擬機(jī)hn-kehongJava技術(shù)體系所包括的內(nèi)容Java虛擬機(jī)hn-kehong Java運(yùn)行時(shí)內(nèi)存區(qū)域Java虛擬機(jī)hn-kehong Java運(yùn)行時(shí)內(nèi)存區(qū)域Java虛擬機(jī)hn-kehong 程序計(jì)數(shù)器一塊較小的內(nèi)存空間。它的作用可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器?!本€程私有“的內(nèi)存:Java虛擬機(jī)的多線程是通過線程輪流切換并分配處理器執(zhí)行時(shí)間的方式來實(shí)現(xiàn),在任何一個(gè)確定的時(shí)刻,一個(gè)處理器只會執(zhí)行一條線程中的指令。為了線程切換后能

16、恢復(fù)到正確的執(zhí)行位置,每條線程都需要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,各條線程之間的計(jì)數(shù)器互不影響,獨(dú)立存儲。唯一一個(gè)在Java虛擬機(jī)規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域。Java虛擬機(jī)hn-kehong 程序計(jì)數(shù)器一塊較小的內(nèi)Java虛擬機(jī)hn-kehong Java虛擬機(jī)?!熬€程私有”,生命周期與線程相同。 虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法被執(zhí)行的時(shí)候都會同時(shí)創(chuàng)建一個(gè)棧幀(Stack Frame,方法運(yùn)行期的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu))用于存儲局部變量表、操作棧、動態(tài)鏈接、方法出口等信息。每一個(gè)方法被調(diào)用直至執(zhí)行完成額過程,就對應(yīng)著一個(gè)棧幀在虛擬機(jī)中從入棧到出棧的過程。

17、兩種異常狀況:StackOverflowError異常:線程請求的棧深度大于虛擬機(jī)所允許的深度OutOfMemoryError異常:如果虛擬機(jī)??梢詣討B(tài)擴(kuò)展,當(dāng)擴(kuò)展時(shí)無法申 請到足夠的內(nèi)存Java虛擬機(jī)hn-kehong Java虛擬機(jī)棧“線程Java虛擬機(jī)hn-kehong本地方法棧同虛擬機(jī)棧類似虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java方法服務(wù)本地方法棧為虛擬機(jī)使用的Native方法服務(wù)虛擬機(jī)歸法中對本地方法棧中使用的語言、使用方式與數(shù)據(jù)接口并沒有強(qiáng)制規(guī)定,因此具體的虛擬機(jī)可以自由實(shí)現(xiàn)它。有的虛擬機(jī)(Sun HotSpot虛擬機(jī))直接把本地方法棧和虛擬機(jī)棧合二為一。兩種異常狀況StackOverflow

18、Error異常:線程請求的棧深度大于虛擬機(jī)所允許的深度OutOfMemoryError異常:如果本地方法??梢詣討B(tài)擴(kuò)展,當(dāng)擴(kuò)展時(shí)無法 申請到足夠的內(nèi)存Java虛擬機(jī)hn-kehong本地方法棧同虛擬機(jī)棧類似Java虛擬機(jī)hn-kehongJava堆Java堆是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊,也是GC管理的主要區(qū)域。Java堆是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動時(shí)創(chuàng)建。該內(nèi)存區(qū)域唯一的目的就是存放對象實(shí)例,幾乎所有的對象實(shí)例都在這里分配內(nèi)存 Java虛擬機(jī)規(guī)范規(guī)定,Java堆可以處于物理上不連續(xù)的內(nèi)存空間中,只要邏輯上連續(xù)的即可。在實(shí)現(xiàn)時(shí),既可以實(shí)現(xiàn)成固定大小的,也可以是可擴(kuò)展的,當(dāng)前主流的虛擬機(jī)都是按照可擴(kuò)展來實(shí)現(xiàn)的(通過-Xmx和-Xms控制)OutOfMemoryError:如果在堆中沒有內(nèi)存完成實(shí)例分配,并且堆也無法再擴(kuò)展時(shí)Java虛擬機(jī)hn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論