Tomcat內(nèi)存溢出的三種情況及解決辦法分析_第1頁(yè)
Tomcat內(nèi)存溢出的三種情況及解決辦法分析_第2頁(yè)
Tomcat內(nèi)存溢出的三種情況及解決辦法分析_第3頁(yè)
Tomcat內(nèi)存溢出的三種情況及解決辦法分析_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、tomcat 內(nèi)存溢出的三種情況及解決辦法分析2009-08-24 15:25:08 來(lái)源: 作者:在生產(chǎn)環(huán)境中 tomcat內(nèi)存設(shè)置不好很容易出現(xiàn)內(nèi)存溢出。造成內(nèi)存原因是不一樣的,當(dāng)然處理方式也不一樣。tomcat 內(nèi)存溢出的原因在生產(chǎn)環(huán)境中 tomcat內(nèi)存設(shè)置不好很容易出現(xiàn)內(nèi)存溢出。造成內(nèi)存原因是不一樣的,當(dāng)然處理方式也不一樣。這里根據(jù)平時(shí)遇到的情況和相關(guān)資料進(jìn)行一個(gè)總結(jié)。常見(jiàn)的一般會(huì)有下面三種情況: 1.outofmemoryerror : java heap space 2.outofmemoryerror : permgen space 3.outofmemoryerror : u

2、nable to create new native thread. tomcat 內(nèi)存溢出解決方案對(duì)于前兩種情況,在應(yīng)用本身沒(méi)有內(nèi)存泄露的情況下可以用設(shè)置tomcat jvm參數(shù)來(lái)解決。( -xms -xmx -xx :permsize -xx :maxpermsize)最后一種可能需要調(diào)整操作系統(tǒng)和tomcat jvm 參數(shù)同時(shí)調(diào)整才能達(dá)到目的。第一種:是堆溢出。在jvm 中如果 98的時(shí)間是用于 gc且可用的 heap size 不足2的時(shí)候?qū)伋龃水惓P畔ⅰ](méi)有內(nèi)存泄露的情況下,調(diào)整-xms -xmx 參數(shù)可以解決。 -xms :初始堆大小 -xmx :最大堆大小但堆的大小受下面三方面

3、影響: 1.相關(guān)操作系統(tǒng)的數(shù)據(jù)模型(32-bt還是 64-bit)限制;( 32位系統(tǒng)下,一般限制在1.5g2g;我在 2003server 系統(tǒng)下(物理內(nèi)存: 4g和6g,jdk:1.6)測(cè)試 1612m,64為操作系統(tǒng)對(duì)內(nèi)存無(wú)限制。) 2.系統(tǒng)的可用虛擬內(nèi)存限制; 3.系統(tǒng)的可用物理內(nèi)存限制。堆的大小可以使用 java -xmx*m version 命令來(lái)測(cè)試。支持的話(huà)會(huì)出現(xiàn)jdk的版本號(hào),不支持會(huì)報(bào)錯(cuò)。 -xms -xmx 一般配置成一樣比較好比如set java_opts= -xms1024m -xmx1024m第二種:永久保存區(qū)域溢出 permgen space 的全稱(chēng)是 perma

4、nent generation space ,是指內(nèi)存的永久保存區(qū)域。這一部分用于存放class和meta的信息, class在被 load的時(shí)候被放入 permgen space 區(qū)域,它和和存放 instance的heap區(qū)域不同, gc(garbage collection)不會(huì)在主程序運(yùn)行期對(duì)permgen space 進(jìn)行清理,所以如果你的app會(huì)load 很多class的話(huà),就很可能出現(xiàn) permgen space 錯(cuò)誤。這種錯(cuò)誤常見(jiàn)在 web服務(wù)器對(duì) jsp 進(jìn)行pre compile的時(shí)候。但目前的 hibernate和spring項(xiàng)目中也很容易出現(xiàn)這樣的問(wèn)題。http:/ 的

5、帖子有討論的這個(gè)問(wèn)題??赡苁怯捎谶@些框架會(huì)動(dòng)態(tài)class,而且 jvm的gc是不會(huì)清理 pemgen space 的,導(dǎo)致內(nèi)存溢出。這一個(gè)一般是加大 -xx :permsize -xx :maxpermsize 來(lái)解決問(wèn)題。 -xx :permsize 永久保存區(qū)域初始大小 -xx :permsize 永久保存區(qū)域初始最大值這一般結(jié)合第一條使用,比如 set java_opts= -xms1024m -xmx1024m -xx:permsize=128m -xx :permsize=256m有一點(diǎn)需要注意: java -xmx*m version 命令來(lái)測(cè)試的最大堆內(nèi)存是 -xmx 與 -xx

6、 :permsize 的 和比如系統(tǒng)支持最大的 jvm堆大小事 1.5g,那 -xmx1024m -xx :permsize=768m 是無(wú)法運(yùn)行的。第三種:無(wú)法創(chuàng)建新的線(xiàn)程。這種現(xiàn)象比較少見(jiàn),也比較奇怪,主要是和jvm與系統(tǒng)內(nèi)存的比例有關(guān)。這種怪事是因?yàn)?jvm 已經(jīng)被系統(tǒng)分配了大量的內(nèi)存(比如1.5g),并且它至少要占用可用內(nèi)存的一半。有人發(fā)現(xiàn),在線(xiàn)程個(gè)數(shù)很多的情況下,你分配給jvm 的內(nèi)存越多,那么,上述錯(cuò)誤發(fā)生的可能性就越大。產(chǎn)生這種現(xiàn)象的原因如下(從這個(gè)blog中了解到原因:http:/ 32位的進(jìn)程最多可以使用 2g的可用內(nèi)存,因?yàn)榱硗?2g被操作系統(tǒng)保留。這里假設(shè)使用1.5g給j

7、vm ,那么還余下 500m可用內(nèi)存。這 500m內(nèi)存中的一部分必須用于系統(tǒng)dll的加載,那么真正剩下的也許只有 400m,現(xiàn)在關(guān)鍵的地方出現(xiàn)了:當(dāng)你使用java創(chuàng)建一個(gè)線(xiàn)程,在 jvm 的內(nèi)存里也會(huì)創(chuàng)建一個(gè)thread對(duì)象,但是同時(shí)也會(huì)在操作系統(tǒng)里創(chuàng)建一個(gè)真正的物理線(xiàn)程(參考jvm 規(guī)范),操作系統(tǒng)會(huì)在余下的 400兆內(nèi)存里創(chuàng)建這個(gè)物理線(xiàn)程,而不是在jvm 的1500m的內(nèi)存堆里創(chuàng)建。在 jdk1.4里頭,默認(rèn)的棧大小是 256kb,但是在 jdk1.5里頭,默認(rèn)的棧大小為 1m每線(xiàn)程,因此,在余下 400m的可用內(nèi)存里邊我們最多也只能創(chuàng)建 400個(gè)可用線(xiàn)程。這樣結(jié)論就出來(lái)了,要想創(chuàng)建更多的

8、線(xiàn)程,你必須減少分配給jvm 的最大內(nèi)存。還有一種做法是讓jvm 宿主在你的 jni代碼里邊。給出一個(gè)有關(guān)能夠創(chuàng)建線(xiàn)程的最大個(gè)數(shù)的估算公式:(maxprocessmemory - jvmmemory - reservedosmemory ) / (threadstacksize ) = number of threads對(duì)于jdk1.5而言,假設(shè)操作系統(tǒng)保留120m內(nèi)存: 1.5gb jvm : (2gb-1.5gb-120mb )/(1mb) = 380 threads 1.0gb jvm : (2gb-1.0gb-120mb )/(1mb) = 880 threads在2000/xp/2003的boot.ini里頭有一個(gè)啟動(dòng)選項(xiàng),好像是

溫馨提示

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

評(píng)論

0/150

提交評(píng)論