經驗不在于年限,在于積累---專注互聯網軟件開發

          把工作當事業做,把項目當作品做!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

            利用Hadoop分析BHO上報日志時,發現很多日志文件會出現下面的錯誤:

          clip_image002

            即在map結束的時候拋出Java堆棧溢出異常!

          (友情提示:本博文章歡迎轉載,但請注明出處:hankchen,http://www.aygfsteel.com/hankchen

            首先設置下面的參數:

          clip_image004

          發現還是解決不了問題。開始懷疑代碼問題,于是進行了一系列的優化:

          clip_image006

          主要的優化是,在map和reduce程序中,重用key和value對象。但是發現還是解決不了問題。并且mapred.child.java.opts設置3G也無濟于事。

          沒有辦法,只好繼續找原因。最后發現一個規律:報這個異常出錯的日志不一定是最大的日志。

          只好使用最后一招了,直接分析報錯時的Java堆內存情況!

          再次出現異常的時候,把集群里面所有的機器的Hadoop進程的堆內存導出來分析!

          主要是下面的幾類進程:

          clip_image008

          同時,關注每臺機器的top命令輸出,可以從內存的使用情況中發現主要是哪臺機器出問題!然后重點導出這臺機器的Java堆參數!

          jmap -dump:live,format=b,file=heapt0923.bin pid

          clip_image010

          剩下來的就是把/data/bhopid_output/heapt0923.bin這個文件復制到本地,利用Eclipse Memory Analyzer Tool 進行分析!

          下面是分析的結果:

          clip_image012

          發現有兩個內存泄漏的情況:

          1、

          clip_image014

          2、

          clip_image016

          找到根本原因:說明日志文件有這樣很大的空記錄導致的!在代碼中把這些記錄忽略掉即可!

          clip_image002[11]

           

          (友情提示:本博文章歡迎轉載,但請注明出處:hankchen,http://www.aygfsteel.com/hankchen

          posted on 2012-03-21 17:52 hankchen 閱讀(8803) 評論(0)  編輯  收藏 所屬分類: 工作感悟
          主站蜘蛛池模板: 庆安县| 冷水江市| 上蔡县| 东兰县| 洪雅县| 青河县| 太康县| 常熟市| 惠州市| 汾阳市| 福鼎市| 张家界市| 西城区| 敖汉旗| 玉山县| 永昌县| 闸北区| 涟源市| 衡东县| 江口县| 深圳市| 泰和县| 铁岭县| 江源县| 汽车| 德江县| 苏尼特左旗| 隆子县| 德州市| 玉田县| 武汉市| 新巴尔虎右旗| 秭归县| 台南市| 含山县| 寻甸| 黑龙江省| 东乡族自治县| 鸡东县| 郓城县| 菏泽市|