亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦硬件知識(shí)>內(nèi)存知識(shí)>

      was manage內(nèi)存溢出

      時(shí)間: 樂(lè)恒1051 分享

        異常內(nèi)存溢出有個(gè)復(fù)雜的說(shuō)明,為此學(xué)習(xí)啦小編為大家整理推薦了以下內(nèi)容,希望大家喜歡。

        was manage內(nèi)存溢出

        WAS 內(nèi)存溢出(OutofMemory)問(wèn)題分析常用方法

        簡(jiǎn)述 OOM(內(nèi)存溢出):

        內(nèi)存溢出是指在應(yīng)用系統(tǒng)中存在無(wú)法回收的內(nèi)存或內(nèi)存使用的過(guò)多,最終導(dǎo)致應(yīng)用程序無(wú)法為新的對(duì)象分配內(nèi)存空間,這時(shí)Java運(yùn)行時(shí)會(huì)拋出一個(gè) OutOfMemoryError 的異

        常,簡(jiǎn)稱 OOM。

        簡(jiǎn)述 Java堆(Java Heap):

        JVM 內(nèi)存從邏輯上來(lái)說(shuō)分為多個(gè)空間,Java堆是 JVM 所管理的內(nèi)存空間中最大的一塊。我們可以通過(guò) JVM 啟動(dòng)參數(shù) -Xms、-Xmx 來(lái)設(shè)定它的大小。GC 工作的主要區(qū)域也是

        在這里,因?yàn)榛旧纤械膶?duì)象實(shí)例的內(nèi)存都是在這里分配的。

        簡(jiǎn)述 GC (垃圾收集器):

        在 JVM 中,內(nèi)存的釋放是由垃圾收集器(GarbageCollection,GC)完成的,當(dāng)一個(gè)對(duì)象不再被引用的時(shí)候,GC 便回收它所占用的內(nèi)存空間。

        -----------------------------------

        觸發(fā)內(nèi)存溢出的可能原因:

        1、集合類中(List、MAP)有對(duì)對(duì)象的引用,使用完后未清空

        2、內(nèi)存一次性加載的數(shù)據(jù)量過(guò)多

        3、內(nèi)存產(chǎn)生大量碎片,沒(méi)有連續(xù)可用空間

        4、代碼中存在死循環(huán)或遞歸調(diào)用

        5、JVM 啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)小

        6、系統(tǒng)物理內(nèi)存過(guò)小

        -----------------------------------

        在分析問(wèn)題時(shí),我們需要收集以下日志:

        GC日志:native_stderr.log (在 JVM 啟動(dòng)參數(shù)中加入 -verbose:gc 打開詳細(xì)垃圾回收)

        通過(guò) GC 日志native_stderr.log查看垃圾回收情況

        應(yīng)用系統(tǒng)日志:SystemOut.log

        查看具體錯(cuò)誤信息

        線程轉(zhuǎn)儲(chǔ):javacore

        通過(guò) heapdump 分析可疑泄漏對(duì)象

        堆轉(zhuǎn)儲(chǔ):heapdump

        通過(guò) javacore 分析線程執(zhí)行狀態(tài)

        ------------------------------------

        生成javacore和heapdump,可以多次收集,然后通過(guò)工具比較分析,這樣更容易發(fā)現(xiàn)問(wèn)題

        [root@was01 bin]# ./wsadmin.sh -user wasadmin -password password

        設(shè)置jvm環(huán)境變量

        wsadmin>set jvm [$AdminControl completeObjectName type=JVM,process=server1,*]

        生成javacore文件:

        wsadmin>$AdminControl invoke $jvm dumpThreads

        找到JVM對(duì)象名字

        wsadmin>set objectName [$AdminControl queryNames type=JVM,process=server1,*]

        生成heapdump文件:

        wsadmin>$AdminControl invoke $objectName generateHeapDump

        ------------------------------------

        在 WAS 中,我們可以嘗試以下方法,緩解內(nèi)存溢出問(wèn)題,具體方法請(qǐng)根據(jù)實(shí)際情況判斷:

        1、更改垃圾回收算法

        2、優(yōu)化 JVM 啟動(dòng)參數(shù)

        3、增加 JVM 內(nèi)存大小要想更好的解決 java.lang.OutOfMemoryError 的問(wèn)題,我們需要從應(yīng)用程序入手,因?yàn)閮?yōu)化程序帶來(lái)的性能改善遠(yuǎn)遠(yuǎn)高于對(duì) WAS 的調(diào)試。

        -----------------------------------------

        以下是對(duì)內(nèi)存泄漏的幾種分類:(摘抄自網(wǎng)絡(luò))

        1. 常發(fā)性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼會(huì)被多次執(zhí)行到,每次被執(zhí)行的時(shí)候都會(huì)導(dǎo)致一塊內(nèi)存泄漏。

        2. 偶發(fā)性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過(guò)程下才會(huì)發(fā)生。常發(fā)性和偶發(fā)性是相對(duì)的。對(duì)于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的。所以測(cè)試環(huán)境和測(cè)試方法對(duì)檢測(cè)內(nèi)存泄漏至關(guān)重要。

        3. 一次性內(nèi)存泄漏。發(fā)生內(nèi)存泄漏的代碼只會(huì)被執(zhí)行一次,或者由于算法上的缺陷,導(dǎo)致總會(huì)有一塊且僅有一塊內(nèi)存發(fā)生泄漏。

        4. 隱式內(nèi)存泄漏。程序在運(yùn)行過(guò)程中不停的分配內(nèi)存,但是直到結(jié)束的時(shí)候才釋放內(nèi)存。嚴(yán)格的說(shuō)這里并沒(méi)有發(fā)生內(nèi)存泄漏,因?yàn)樽罱K程序釋放了所有申請(qǐng)的內(nèi)存。但是對(duì)于一個(gè)服務(wù)器程序,需要運(yùn)行幾天,幾周甚至幾個(gè)月,不及時(shí)釋放內(nèi)存也可能導(dǎo)致最終耗盡系統(tǒng)的所有內(nèi)存。所以,我們稱這類內(nèi)存泄漏為隱式內(nèi)存泄漏。

      2946152