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

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

            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 閱讀(8815) 評論(0)  編輯  收藏 所屬分類: 工作感悟
          主站蜘蛛池模板: 浦北县| 新河县| 桓仁| 腾冲县| 辛集市| 延吉市| 新河县| 东宁县| 遂宁市| 芷江| 密云县| 宁都县| 七台河市| 耒阳市| 安义县| 许昌市| 东安县| 大冶市| 韩城市| 当雄县| 大渡口区| 社旗县| 阳山县| 乌拉特后旗| 绍兴市| 措美县| 孟州市| 土默特左旗| 永丰县| 大化| 武隆县| 屏东市| 弋阳县| 龙州县| 瑞安市| 达尔| 陵水| 芮城县| 宝应县| 沁阳市| 福安市|