<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java快速開發(fā)平臺

    www.fastunit.com

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      23 Posts :: 0 Stories :: 273 Comments :: 0 Trackbacks

    內(nèi)存問題錯(cuò)綜復(fù)雜,本人水平也有限,淺薄之見僅供參考。

    一、GC監(jiān)控

    GC日志記錄了內(nèi)存使用和回收狀態(tài),出現(xiàn)內(nèi)存故障時(shí),可作為分析排查手段。

    1. 啟用GC監(jiān)控的方法:增加java啟動(dòng)參數(shù)-verbose:gc,輸出信息的樣例:

    ? GC?135:?total?final?references?4390;?cleared?final?references?8.?
    GC?135:?total?phantom?references?0;?cleared?phantom?references?0.?
    GC?135:?total?old?soft?references?0;?cleared?old?soft?references?0.?
    GC?135:?total?JNI?global?weak?references?0;?cleared?JNI?global?weak?references?0.?
    GC?136:?starting?collection,?maximum?allocation?reached.?
    GC?136:?live?objects?1081046;?collected?objects?6038;?collected(KB)?558.?
    GC?136:?queued?for?finalization?0;?total?soft?references?113;?cleared?soft?references?18.?
    GC?136:?current?heap(KB)?716784;?current?threshold(KB)?262144.?
    GC?136:?collect?(milliseconds)?1314.?
    GC?136:?current?cycle?allocation(KB)?0;?previous?cycle?allocation(KB)?532.?
    GC?136:?total?weak?references?1321;?cleared?weak?references?0.?

    2. 將GC日志輸出到文件:不同JDK設(shè)置的參數(shù)不同,參考JDK官方文檔
    ?? SUN:-Xloggc:filename (例如:-Xloggc:D:/gc.log)
    ?? IBM:-Xverbosegc:file=filename 或 -Xverbosegclog:filename
    ?? HP?:-Xverbosegc=filename??

    3. 如何設(shè)置Java啟動(dòng)參數(shù):有多種方式,以下各舉一例
    ?? Tomcat:在catalina.bat的“set JAVA_OPTS=%JAVA_OPTS% ”后設(shè)置
    ?? WebLogic:在startWebLogic.cmd的“%JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% ”后設(shè)置
    ?? WebSphere:進(jìn)入管理控制臺,應(yīng)用服務(wù)器->進(jìn)程定義->Java虛擬機(jī)高級定義

    4. GC日志的圖形分析工具:HP的jtune


    二、內(nèi)存問題描述

    典型現(xiàn)象是系統(tǒng)運(yùn)行一段時(shí)間后,報(bào)OutOfMemoryError錯(cuò)誤、頁面非常慢、不響應(yīng)或完全不再接受請求,而此時(shí)通過觀察JVM內(nèi)存,發(fā)現(xiàn)內(nèi)存急劇上升到最大值并居高不下。

    這種問題出現(xiàn)后,往往很棘手,通常是由于應(yīng)用程序不合理造成的,而不合理程序或內(nèi)存泄漏的源頭可能并不明顯。本人的一次經(jīng)歷是,經(jīng)過十多天各種測試手段后,最后確定問題是由一處String累加引起的,改成StringBuffer就解決了,可見,忽略“小問題”往往會帶來大麻煩。

    三、分析手段

    1. 分析GC日志、系統(tǒng)日志
    2. 程序中設(shè)置監(jiān)控?cái)帱c(diǎn)
    3. 盡可能重現(xiàn)故障并同時(shí)監(jiān)控JVM內(nèi)存,找出引起內(nèi)存急劇上升的規(guī)律
    4. 檢查關(guān)鍵程序或頻繁使用的工具類的合理性

    四、解決手段

    1. 主要從程序入手:降低內(nèi)存使用量;字符串累加時(shí)以StringBuffer代替String;隨時(shí)釋放不再需要的對象;SQL優(yōu)化及避免頻繁取出大量數(shù)據(jù);Session中不要放大的數(shù)據(jù)。。。
    2. 據(jù)WebSphere和WebLogic官方建議:通常情況下JVM的Heap最小值和最大值可設(shè)成一樣(根據(jù)實(shí)際情況調(diào)整),可取系統(tǒng)內(nèi)存的25%-75%,保證JVM有合理足夠的內(nèi)存大小
    3. 應(yīng)用服務(wù)器的其他優(yōu)化措施

    五、應(yīng)急措施

    1. 不設(shè)定JVM的最大Heap上限
    2. 程序中判斷內(nèi)存吃緊時(shí)執(zhí)行Runtime.gc()強(qiáng)制垃圾收集,此方式比自動(dòng)收集徹底,可一定程度上改善內(nèi)存利用效率
    3. 在不影響業(yè)務(wù)的情況下,定期重啟應(yīng)用服務(wù)器

    posted on 2008-01-23 13:31 FastUnit 閱讀(7371) 評論(9)  編輯  收藏 所屬分類: Java

    Feedback

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案 2008-01-23 13:42 BeanSoft
    非常不錯(cuò)!  回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2008-01-23 15:28 dennis
    據(jù)WebSphere和WebLogic官方建議:JVM的Heap最小值和最大值設(shè)成一樣,這個(gè)說法是誤導(dǎo)人的。不同的jvm的垃圾回收算法不同,甚至同一個(gè)jvm也有不同的GC算法,還是要根據(jù)實(shí)際情況調(diào)整。  回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2008-01-23 15:48 FastUnit
    @BeanSoft
    感謝老大的鼓勵(lì)!

    @dennis
    這一點(diǎn)我沒有太多經(jīng)驗(yàn)無從判斷,不過這確實(shí)是多位官方專家在現(xiàn)場給予的建議,應(yīng)當(dāng)是針對他們自己的產(chǎn)品而言。為求準(zhǔn)確,我加上一句“通常情況下”,感謝指正!
      回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2008-01-23 18:19 BeanSoft
    呵呵 老大不敢當(dāng) 不過 JVM 參數(shù)設(shè)置的確有很多貓膩呢。。。 在以前公司搞過一陣子 Weblogic JVM 調(diào)優(yōu)  回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述[未登錄] 2008-01-23 20:25 吳開春
    在產(chǎn)品運(yùn)行中,僅僅為了捕獲可能的泄漏問題而打開GC日志并不值得。

    相對而言,在系統(tǒng)一個(gè)版本完成時(shí),用內(nèi)存檢查工具來進(jìn)行測試。在開發(fā)過程中,解決一部分泄漏問題。性價(jià)比要高一點(diǎn)。

    實(shí)際運(yùn)行過程中,如果產(chǎn)生泄漏必定是某一過程重復(fù)積累到一定程度導(dǎo)致的。往往需要結(jié)合日志從發(fā)生問題的邊界點(diǎn)檢視代碼,再努力重現(xiàn)問題來解決。
      回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2008-01-24 10:27 怎么羨慕天空的飛鳥
    非常感謝,  回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2008-01-24 15:52 FastUnit
    @dennis,BeanSoft
    看來還得加上dennis的一句話:根據(jù)實(shí)際情況調(diào)整。  回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2008-01-24 15:55 FastUnit
    @吳開春
    完全贊同,無論內(nèi)存問題還是其他問題,越早暴露越好,也需要良好的編程習(xí)慣避免問題的產(chǎn)生。對于大型系統(tǒng)而言,在運(yùn)行期間出問題往往是致命的。  回復(fù)  更多評論
      

    # re: 如何監(jiān)控GC及內(nèi)存問題解決方案概述 2009-06-15 10:04 ufo
    (web server軟件)UFO不會出現(xiàn)一個(gè)字節(jié)的內(nèi)存泄漏和一個(gè)線程的不能回收,使用UFO做Web Server的好處是網(wǎng)站能做得很穩(wěn)定,永遠(yuǎn)也不會自己down掉;UFO在托管機(jī)房丟包率很高、遭受Hacker攻擊、互聯(lián)網(wǎng) 骨干網(wǎng)被黑等惡劣的環(huán)境條件下仍然能很好地運(yùn)行;UFO在對付Hacker方面(防Hacker弄down和Hacker抓取不該訪問的資源)也有足 夠措施。
    另外,UFO幾乎不會進(jìn)行垃圾回收,消耗CPU很少,在普通的PC Server上用UFO運(yùn)行網(wǎng)站,平時(shí)CPU占用率<0.1%,最多時(shí)也不會超 過5%。您知道,JVM的垃圾回收會導(dǎo)致大量的運(yùn)算,消耗很多CPU,從而導(dǎo)致Server的負(fù)載能力和響應(yīng)速度下降。UFO在對象管理方面采 用了很好的機(jī)制和算法,做得很出色。用UFO運(yùn)行網(wǎng)站,可以一直保證高負(fù)載能力,快速的響應(yīng)速度和低CPU消耗。發(fā)布網(wǎng)址:www.gm365.com
      回復(fù)  更多評論
      

    主站蜘蛛池模板: 日本片免费观看一区二区| 久草免费福利在线| 69式国产真人免费视频| 亚洲AV人无码综合在线观看| 嫩草在线视频www免费看| 亚洲中文字幕视频国产| a毛片成人免费全部播放| 国产91精品一区二区麻豆亚洲| 一级特黄录像视频免费| 亚洲女人被黑人巨大进入| 国产国产人免费人成成免视频| 国产精品亚洲不卡一区二区三区 | 成年人免费的视频| 亚洲网红精品大秀在线观看| 真实国产乱子伦精品免费| 亚洲大香人伊一本线| 免费无码又爽又刺激聊天APP| 亚洲AV男人的天堂在线观看| 国产极品粉嫩泬免费观看| 杨幂最新免费特级毛片| 国产亚洲日韩在线三区| 无码日韩精品一区二区三区免费 | 亚洲成a人片在线观看日本| 久久国产免费观看精品3| 精品亚洲成A人无码成A在线观看 | 亚洲亚洲人成综合网络| 99精品视频在线观看免费专区 | 国产成人精品日本亚洲专区6| 好爽…又高潮了毛片免费看| 黄人成a动漫片免费网站| 亚洲人精品午夜射精日韩| 久久久久久精品成人免费图片| va天堂va亚洲va影视中文字幕 | 亚洲欧美日韩一区二区三区| 亚洲精品无码久久不卡| 亚洲成人免费在线| 亚洲成a人无码亚洲成www牛牛| 久久久久噜噜噜亚洲熟女综合| 亚州免费一级毛片| 久久精品无码免费不卡| 亚洲依依成人精品|