狠狠操网,91中文字幕在线观看,精品久久香蕉国产线看观看亚洲,亚洲haose在线观看

內存溢出的原因及解決方法

第1篇:內存溢出的原因及解決方法

引起內存溢出的原因

1.內存中加載的數(shù)據(jù)量過于龐大,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù);

2.*類中有對對象的引用,使用完后未清空,使得jvm不能回收;

3.代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復的對象實體;

4.使用的第三方軟件中的bug;

5.啟動參數(shù)內存值設定的過小

內存溢出的解決方案:

第一步,修改jvm啟動參數(shù),直接增加內存。(-xms,-xmx參數(shù)一定不要忘記加。)

第二步,檢查錯誤日志,查看“outofmemory”錯誤前是否有其它異;蝈e誤。

第三步,對代碼進行走查和分析,找出可能發(fā)生內存溢出的位置。

重點排查以下幾點:

1.檢查對數(shù)據(jù)庫查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來說,如果一次取十萬條記錄到內存,就可能引起內存溢出。這個問題比較隱蔽,在上線前,數(shù)據(jù)庫中數(shù)據(jù)較少,不容易出問題,上線后,數(shù)據(jù)庫中數(shù)據(jù)多了,一次查詢就有可能引起內存溢出。因此對于數(shù)據(jù)庫查詢盡量采用分頁的方式查詢。

2.檢查代碼中是否有死循環(huán)或遞歸調用。

3.檢查是否有大循環(huán)重復產(chǎn)生新對象實體。

4.檢查對數(shù)據(jù)庫查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來說,如果一次取十萬條記錄到內存,就可能引起內存溢出。這個問題比較隱蔽,在上線前,數(shù)據(jù)庫中數(shù)據(jù)較少,不容易出問題,上線后,數(shù)據(jù)庫中數(shù)據(jù)多了,一次查詢就有可能引起內存溢出。因此對于數(shù)據(jù)庫查詢盡量采用分頁的方式查詢。

5.檢查list、map等*對象是否有使用完后,未清除的問題。list、map等*對象會始終存有對對象的引用,使得這些對象不能被gc回收。

第四步,使用內存查看工具動態(tài)查看內存使用情況

第2篇:Tomcat內存溢出分析及解決方法

jvm管理兩種類型的內存,堆和非堆。堆是給開發(fā)人員用的上面說的就是,是在jvm啟動時創(chuàng)建;非堆是留給jvm自己用的,用來存放類的信息的。它和堆不同,運行期內gc不會釋放空間。

一、內存溢出類型

1、java.lang.outofmemoryerror:permgenspace

jvm管理兩種類型的內存,堆和非堆。堆是給開發(fā)人員用的上面說的就是,是在jvm啟動時創(chuàng)建;非堆是留給jvm自己用的,用來存放類的信息的。它和堆不同,運行期內gc不會釋放空間。如果webapp用了大量的第三方jar或者應用有太多的class文件而恰好maxpermsize設置較小,超出了也會導致這塊內存的占用過多造成溢出,或者tomcat熱部署時侯不會清理前面加載的環(huán)境,只會將context更改為新部署的,非堆存的內容就會越來越多。

permgenspace的全稱是permanentgenerationspace,是指內存的永久保存區(qū)域,這塊內存主要是被jvm存放class和meta信息的,class在被loader時就會被放到permgenspace中,它和存放類實例(instance)的heap區(qū)域不同,gc(garbagecollection)不會在主程序運行期對permgenspace進行清理,所以如果你的應用中有很class的話,就很可能出現(xiàn)permgenspace錯誤,這種錯誤常見在web服務器對jsp進行prepile的時候。如果你的webapp下都用了大量的第三方jar,其大小超過了jvm默認的大小(4m)那么就會產(chǎn)生此錯誤信息了。

一個最佳的配置例子:(經(jīng)過本人驗*,自從用此配置之后,再未出現(xiàn)過tomcat死掉的情況)

setjava_opts=-xms800m-xmx800m-xx:permsize=128m-xx:maxnewsize=256m-xx:maxpermsize=256m

在linux下在tomcathome/conf/catalina.sh中加上如標紅所示的一句代碼:可以增加tomcatjvm的內存,這樣就不容易出現(xiàn)內存溢出的現(xiàn)象了!

#-----executetherequestedmand-----------------------------------------

java_opts="-server-xms512m-xmx2048m-xx:permsize=128m-xx:maxnewsize=256m-xx:maxpermsize=256m"

#bugzilla37848:onlyoutputthisifwehaveatty

2、java.lang.outofmemoryerror:javaheapspace

第一種情況是個補充,主要存在問題就是出現(xiàn)在這個情況中。其默認空間(即-xms)是物理內存的1/64,最大空間(-xmx)是物理內存的1/4。如果內存剩余不到40%,jvm就會增大堆到xmx設置的值,內存剩余超過70%,jvm就會減小堆到xms設置的值。所以服務器的xmx和xms設置一般應該設置相同避免每次gc后都要調整虛擬機堆的大小。假設物理內存無限大,那么jvm內存的最大值跟*作系統(tǒng)有關,一般32位機是1.5g到3g之間,而64位的就不會有限制了。

注意:如果xms超過了xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者*作系統(tǒng)的最大限制都會引起服務器啟動不起來。

垃圾回收gc的角*

jvm調用gc的頻度還是很高的,主要兩種情況下進行垃圾回收:

當應用程序線程空閑;另一個是java內存堆不足時,會不斷調用gc,若連續(xù)回收都解決不了內存堆不足的問題時,就會報outofmemory錯誤。因為這個異常根據(jù)系統(tǒng)運行環(huán)境決定,所以無法預期它何時出現(xiàn)。

根據(jù)gc的機制,程序的運行會引起系統(tǒng)運行環(huán)境的變化,增加gc的觸發(fā)機會。

為了避免這些問題,程序的設計和編寫就應避免垃圾對象的內存占用和gc的開銷。顯示調用system.gc()只能建議jvm需要在內存中對垃圾對象進行回收,但不是必須馬上回收,

一個是并不能解決內存資源耗空的局面,另外也會增加gc的消耗。

二、jvm內存區(qū)域組成

簡單的說java中的堆和棧

java把內存分兩種:一種是棧內存,另一種是堆內存

1、在函數(shù)中定義的基本類型變量和對象的引用變量都在函數(shù)的棧內存中分配;

2、堆內存用來存放由new創(chuàng)建的對象和數(shù)組

在函數(shù)(代碼塊)中定義一個變量時,java就在棧中為這個變量分配內存空間,當超過變量的作用域后,java會自動釋放掉為該變量所分配的內存空間;在堆中分配的內存由java虛擬機的自動垃圾回收器來管理

堆的優(yōu)勢是可以動態(tài)分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態(tài)分配內存的。缺點就是要在運行時動態(tài)分配內存,存取速度較慢;

棧的優(yōu)勢是存取速度比堆要快,缺點是存在棧中的數(shù)據(jù)大小與生存期必須是確定的無靈活*。

java堆分為三個區(qū):new、old和permanent

gc有兩個線程:

新創(chuàng)建的對象被分配到new區(qū),當該區(qū)被填滿時會被gc輔助線程移到old區(qū),當old區(qū)也填滿了會觸發(fā)gc主線程遍歷堆內存里的所有對象。old區(qū)的大小等于xmx減去-xmn

java棧存放

棧調整:參數(shù)有+usedefaultstacksize-xss256k,表示每個線程可申請256k的?臻g

每個線程都有他自己的stack

三、jvm如何設置虛擬內存

提示:在jvm中如果98%的時間是用于gc且可用的heapsize不足2%的時候將拋出此異常信息。

提示:heapsize最大不要超過可用物理內存的80%,一般的要將-xms和-xmx選項設置為相同,而-xmn為1/4的-xmx值。

提示:jvm初始分配的內存由-xms指定,默認是物理內存的1/64;jvm最大分配的內存由-xmx指定,默認是物理內存的1/4。

默認空余堆內存小于40%時,jvm就會增大堆直到-xmx的最大限制;空余堆內存大于70%時,jvm會減少堆直到-xms的最小限制。因此服務器一般設置-xms、-xmx相等以避免在每次gc后調整堆的大小。

提示:假設物理內存無限大的話,jvm內存的最大值跟*作系統(tǒng)有很大的關系。

簡單的說就32位處理器雖然可控內存空間有4gb,但是具體的*作系統(tǒng)會給一個限制,

這個限制一般是2gb-3gb(一般來說windows系統(tǒng)下為1.5g-2g,linux系統(tǒng)下為2g-3g),而64bit以上的處理器就不會有限制了

注意:如果xms超過了xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者*作系統(tǒng)的最大限制都會引起服務器啟動不起來。

提示:設置newsize、maxnewsize相等,"new"的大小最好不要大于"old"的一半,原因是old區(qū)如果不夠大會頻繁的觸發(fā)"主"gc,大大降低了*能

jvm使用-xx:permsize設置非堆內存初始值,默認是物理內存的1/64;

由xx:maxpermsize設置最大非堆內存的大小,默認是物理內存的1/4。

解決方法:手動設置heapsize

修改tomcat_home/bin/catalina.bat

在“echo"usingcatalina_base:$catalina_base"”上面加入以下行:

java_opts="-server-xms800m-xmx800m-xx:maxnewsize=256m"

第3篇:電腦內存不足的原因及解決方法

腦常提示提示內存不足,怎么辦,有人說可以更換更大容量的內存條,或者直接加內存條,但是這樣是要花費銀子的,除了花錢外,到底還有沒有不用花錢的解決辦法呢?*是肯定的。下面就讓小編為大家介紹一下具體的解決方法吧,歡迎大家參考和學習。

電腦內存不足的原因及解決方法:

一、剪貼板占用了太多的內存

實際上,剪貼板是內存中的一塊臨時區(qū)域,當你在程序中使用了“復制”或“剪切”命令后,Windows將把復制或剪切的內容及其格式等信息暫時存儲在剪貼板上,以供“粘貼”使用。如果當前剪貼板中存放的是一幅圖畫,則剪貼板就占用了不少的內存。這時,請按下述步驟清除剪貼板中的內容,釋放其占用的內存資源:

1.單擊“開始”,指向“程序”或“所有程序”,指向“附件”,指向“系統(tǒng)工具”,然后單擊“剪貼板查看程序”,打開“剪貼板查看程序”窗口。

2.在“編輯”菜單上,單擊“刪除”命令。

3.關閉“剪貼板查看程序”窗口。

為了與MicrosoftOffice程序提供的多重剪貼板相區(qū)分,上述所說的剪貼板,常被我們稱為系統(tǒng)剪貼板。如果你正在使用MicrosOftOffice程序,而且使用了其多重剪貼板功能,那么你應清空“Office剪貼板”上的項目,方法是:在“Office剪貼板”任務窗格(OfficeXP)或工具欄(Office2000)上,單擊“全部清空”或“清空‘剪貼板’”。當清空“Office剪貼板”時,系統(tǒng)剪貼板也將同時被清空。

二、打開的程序太多

如果同時打開的文檔過多或者運行的程序過多,就沒有足夠的內存運行其他程序。這時,對于多文檔界面(MDl)程序,如Word、Excel等,請關閉當前文檔外的所有文檔,并退出當前未使用的程序,然后或許你就能夠繼續(xù)執(zhí)行因“內存不足”而被中斷的任務。

三、重新啟動計算機

如果只退出程序,并不重新啟動計算機,程序可能無法將內存資源歸還給系統(tǒng)。請重新啟動計算機以釋放系統(tǒng)資源,然后再次運行程序或執(zhí)行被中斷的任務。

四、自動運行的程序太多

五、讓Windows管理虛擬內存設置

如果沒有設置讓Windows管理虛擬內存或者禁用虛擬內存,那么計算機可能無法正常工作,也可能收到“內存不足”的消息,或在運行某程序時出現(xiàn)相同的錯誤消息。

1.單擊“開始”,單擊“設置”,單擊“控制面板”,然后雙擊“系統(tǒng)”。

2.在“系統(tǒng)屬*”對話框中,單擊“*能”選項卡,然后單擊“虛擬內存”按鈕。

3.選中“讓Windows管理虛擬內存設置—(推薦)”選項,將計算機中可作為虛擬內存使用的硬盤空間量設置為默認值。此時,虛擬內存分頁“win386.swp”能夠根據(jù)實際內存的使用情況動態(tài)縮小和放大,最小容量為0,最大容量為硬盤的全部可用空間。

4.單擊“確定”按鈕。

六、增加可用磁盤空間

由于Windows以虛擬內存分頁文件的格式使用硬盤空間以模擬RAM(),所以,盡管已設置為讓Windows管理虛擬內存,但是當虛擬內存分頁文件所在的驅動器(默認為Windows系統(tǒng)所在的硬盤分區(qū))沒有足夠的空間時,仍會出現(xiàn)“內存不足”的錯誤。此時,請執(zhí)行以下一項或多項*作,增加Windows虛擬內存分頁文件所在驅動器上的可用空間:

1.清空回收站,方法是:在桌面上,右鍵單擊“回收站”,再單擊“清空回收站”。

2.從磁盤中刪除臨時文件,方法是:打開“Windows資源管理器”或“我的電腦”窗口,右鍵單擊要釋放其空間的磁盤,然后單擊“屬*”,在“常規(guī)”選項卡上,單擊“磁盤清理”按鈕,選中要刪除的不需要的文件前的復選框(如圖3),可以閱讀列表下面區(qū)域中每個文件類型的說明,單擊“確定”按鈕。

3.從磁盤中刪除過期的文件或已存檔的文件。理想KS600C速印機的常見故障

4.刪除從未使用過的所有文件。

七、程序文件被毀壞

如果僅僅是使用某個程序時,系統(tǒng)提示內存不足,而其他程序可以正常運行,那么可能的原因是該程序文件被毀壞,從而導致內存問題。然而Windows并沒有確切地提示表明該程序已損壞,所以請嘗試刪除并重新安裝該程序,然后重新運行該程序。如果系統(tǒng)不再提示內存不足,那么說明原程序文件確實被損壞。

八、使用內存優(yōu)化軟件

內存優(yōu)化軟件有很多,比如RAMIdle和MemoKit就是比較出*的兩個。這些軟件都可以設置自動清空剪貼板、釋放被關閉程序未釋放的內存、對Win386.swp文件進行重新組織等,從而免除你手工*作的麻煩,達到自動釋放內存的目的,不妨一試!復印機為什么復印的不清晰

九、查殺病毒

系統(tǒng)感染電腦病毒也是導致內存不足的罪魁禍首,當系統(tǒng)出現(xiàn)“內存不足”的錯誤時,請使用最新的防毒軟件查殺病毒,或者在清除電腦病毒之后,就解決了“內存不足”的問題。

版權聲明:本文內容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至 yyfangchan@163.com (舉報時請帶上具體的網(wǎng)址) 舉報,一經(jīng)查實,本站將立刻刪除