內(nèi)存溢出出現(xiàn)原因及解決方案_第1頁(yè)
內(nèi)存溢出出現(xiàn)原因及解決方案_第2頁(yè)
內(nèi)存溢出出現(xiàn)原因及解決方案_第3頁(yè)
內(nèi)存溢出出現(xiàn)原因及解決方案_第4頁(yè)
內(nèi)存溢出出現(xiàn)原因及解決方案_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、內(nèi)存溢出出現(xiàn)原因及解決方案篇一:內(nèi)存溢出解決方案內(nèi)存溢出解決方案篇二:內(nèi)存溢出的三種情況及系統(tǒng)配置解決方案近經(jīng)常有人咨詢相關(guān)內(nèi)存溢出的問(wèn)題,在生產(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ì)有下面三種情況: java heap space: permgen space: unable to create new native thread.tomcat 內(nèi)存溢出解決方案對(duì)于前兩種情況,在應(yīng)用本身沒(méi)有內(nèi)存泄露的情況下可以用設(shè)置 tomcat jvm 參數(shù)來(lái)解決。 ( -xms -xm

2、x -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 :最大堆大小但堆的大小受下面三方面影響:1. 相關(guān)操作系統(tǒng)的數(shù)據(jù)模型( 32-bt 還是 64-bit )限制;(32位系統(tǒng)下,一般限制在 2g我在20xx server系統(tǒng)下(物理內(nèi)存: 4g 和 6g, jdk :)測(cè)試 1612m, 64

3、為操作系統(tǒng)對(duì)內(nèi)存無(wú)限制。 )2. 系統(tǒng)的可用虛擬內(nèi)存限制;3. 系統(tǒng)的可用物理內(nèi)存限制。堆的大小可以使用 java -xmx*m version 命令來(lái)測(cè)試。支持的話會(huì)出現(xiàn)jdk 的版本號(hào),不支持會(huì)報(bào)錯(cuò)。 -xms-xmx一般配置成一樣比較好比如set java_opts=xms1024m-xmx1024m第二種:永久保存區(qū)域溢出permgen space 的全稱是 permanent generation space ,是指內(nèi)存的永久保存區(qū)域。這一部分用于存放class 和的信息, class 在被 load 的時(shí)候被放入permgen space 區(qū)域,它和和存放instance 的hea

4、p區(qū)域不同,gc (garbagecollection )不會(huì)在主程序運(yùn)行期對(duì)permgen space 進(jìn)行清理,所以如果你的 app會(huì)loadf艮多class的話,就很可能由現(xiàn)permgenspace錯(cuò)誤。這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)jsp進(jìn)行 pre pile 的時(shí)候。但目前的 hibernate 和 spring 項(xiàng)目中也很容易出現(xiàn)這樣的問(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 永久保

5、存區(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 : permsize 的和 比如系統(tǒng)支持最大的 jvm 堆大小事,那 -xmx1024m -xx : permsize=768m是無(wú)法運(yùn)行的。第三種:無(wú)法創(chuàng)建新的線程。這種現(xiàn)象比較少見(jiàn),也比較奇怪,主要是和 jvm 與系統(tǒng)內(nèi)存的比例有關(guān)。這種怪事是因?yàn)閖vm已

6、經(jīng)被系統(tǒng)分配了大量的內(nèi)存 (比如),并且它至少要占用可用內(nèi)存的一半。有人發(fā)現(xiàn),在線程個(gè)數(shù)很多的情況下,你分配給 jvm的內(nèi)存越多,那么,上述錯(cuò)誤發(fā)生的可能性就越大。 產(chǎn)生這種現(xiàn)象的原因如下(從這個(gè) blog 中了解到原因:每一個(gè) 32 位的進(jìn)程最多可以使用 2g 的可用內(nèi)存,因?yàn)榱硗?g被操作系統(tǒng)保留。這里假設(shè)使用給 jvm,那么還余下 500m可用內(nèi)存。這500m內(nèi)存中的一部分必須用于系統(tǒng) dll 的加載, 那么真正剩下的也許只有400m, 現(xiàn)在關(guān)鍵的地方出現(xiàn)了:當(dāng)你使用java創(chuàng)建一個(gè)線程,在 jvm的內(nèi)存里也會(huì) 創(chuàng)建一個(gè) thread 對(duì)象,但是同時(shí)也會(huì)在操作系統(tǒng)里創(chuàng)建一個(gè)真正的物理線程

7、(參考 jvm規(guī)范),操作系統(tǒng)會(huì)在余下的 400兆內(nèi)存里創(chuàng)建這個(gè)物理線程,而不是在jvm的1500m的內(nèi)存堆里創(chuàng)建。在里頭,默認(rèn)的棧大小是256kb,但是在里頭,默認(rèn)的棧大小為 1m每線程,因此,在余下 400m的可用 內(nèi)存里邊我們最多也只能創(chuàng)建400 個(gè)可用線程。這樣結(jié)論就出來(lái)了,要想創(chuàng)建更多的線程,你必須減少分配給jvm的最大內(nèi)存。還有一種做法是讓jvm宿主在你的jni 代碼里邊。給出一個(gè)有關(guān)能夠創(chuàng)建線程的最大個(gè)數(shù)的估算公式:( maxprocessmemory - jvmmemory- reservedosmemory)/(threadstacksize ) = number of th

8、reads對(duì)于而言,假設(shè)操作系統(tǒng)保留 120m 內(nèi)存:jvm : () / (1mb) = 380 threadsjvm : () / ( 1mb) = 880 threads/pae在 20xx/xp/20xx 的里頭有一個(gè)啟動(dòng)選項(xiàng),好像是:/3g , 可以讓用戶進(jìn)程最大內(nèi)存擴(kuò)充至3g, 這時(shí)操作系統(tǒng)只能占用最多1g的虛存。那樣應(yīng)該可以讓jvm創(chuàng)建更多的線程。因此這種情況需要結(jié)合操作系統(tǒng)進(jìn)行相關(guān)調(diào)整。因此:我們需要結(jié)合不同情況對(duì)tomcat 內(nèi)存分配進(jìn)行不同的診斷才能從根本上解決問(wèn)題。以上就是針對(duì)tomcat 內(nèi)存溢出的幾種解決方案。篇三: java 內(nèi)存溢出解決方案內(nèi)存溢出問(wèn)題說(shuō)明 知識(shí)庫(kù)

9、編號(hào):zjdr-problem-20x、 outofmemoryerror:permgen space 及其解決方案1 、 permgen space 簡(jiǎn)介 permgen space 的全稱是permanent generation space ,是指內(nèi)存的永久保存區(qū)域outofmemoryerror: permgen space內(nèi)存益出的原因:( 1)這一部分用于存放class 和 meta 的信息, class 在被 load 的時(shí)候被放入permgen space 區(qū)域,它和存放instance 的 heap 區(qū)域不同。(2)g5會(huì)在主程序運(yùn)行期對(duì) perm

10、genspace進(jìn)行清理, 所以如果你的app會(huì)loadf艮多class勺話,就很可能由現(xiàn) permgen space錯(cuò)誤。這種錯(cuò)誤常見(jiàn)在 web服務(wù)器對(duì)jsp 進(jìn)行 pre pile 的時(shí)候。如果你的 web ap嚇都用了大量的第三方j(luò)ar ,其大小超 過(guò)了 jvm 默認(rèn)的大小那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。2 、 outofmemmory:permgen space 異常的分析和處理permgen 原來(lái)是指 permanent generation , 本身是在 java 的垃圾收集機(jī)制(gq中產(chǎn)生的一個(gè)概念。java的垃圾收集 機(jī)制最早只是遍歷所有的對(duì)象,如果發(fā)現(xiàn)某個(gè)對(duì)象沒(méi)有被引用,則回收,這是在早期的java和java的時(shí)候的gc規(guī)則。 慢慢的,這樣一種“愚蠢的 gc算法成為了 jvm性能的瓶頸, 在擁有大量數(shù)據(jù)的java應(yīng)用程序中,gc勺算法被高度強(qiáng)化, 于是各種各樣高效的jvm gc算法被發(fā)展了起來(lái)。permane

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論