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

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

            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)  編輯  收藏 所屬分類: 工作感悟
          主站蜘蛛池模板: 汤阴县| 右玉县| 阿拉善盟| 江孜县| 大足县| 顺昌县| 江西省| 获嘉县| 天长市| 祁门县| 遂溪县| 扬州市| 静安区| 安西县| 城口县| 霍邱县| 浦城县| 永寿县| 广丰县| 安远县| 宜宾市| 京山县| 余干县| 马龙县| 南乐县| 张家川| 读书| 彭泽县| 凯里市| 贵南县| 巴林左旗| 蕲春县| 安化县| 南丹县| 伽师县| 大邑县| 灵山县| 陆河县| 江阴市| 将乐县| 泰来县|