經(jīng)驗不在于年限,在于積累---專注互聯(lián)網(wǎng)軟件開發(fā)

          把工作當事業(yè)做,把項目當作品做!

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

            利用Hadoop分析BHO上報日志時,發(fā)現(xiàn)很多日志文件會出現(xiàn)下面的錯誤:

          clip_image002

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

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

            首先設(shè)置下面的參數(shù):

          clip_image004

          發(fā)現(xiàn)還是解決不了問題。開始懷疑代碼問題,于是進行了一系列的優(yōu)化:

          clip_image006

          主要的優(yōu)化是,在map和reduce程序中,重用key和value對象。但是發(fā)現(xiàn)還是解決不了問題。并且mapred.child.java.opts設(shè)置3G也無濟于事。

          沒有辦法,只好繼續(xù)找原因。最后發(fā)現(xiàn)一個規(guī)律:報這個異常出錯的日志不一定是最大的日志。

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

          再次出現(xiàn)異常的時候,把集群里面所有的機器的Hadoop進程的堆內(nèi)存導(dǎo)出來分析!

          主要是下面的幾類進程:

          clip_image008

          同時,關(guān)注每臺機器的top命令輸出,可以從內(nèi)存的使用情況中發(fā)現(xiàn)主要是哪臺機器出問題!然后重點導(dǎo)出這臺機器的Java堆參數(shù)!

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

          clip_image010

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

          下面是分析的結(jié)果:

          clip_image012

          發(fā)現(xiàn)有兩個內(nèi)存泄漏的情況:

          1、

          clip_image014

          2、

          clip_image016

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

          clip_image002[11]

           

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

          posted on 2012-03-21 17:52 hankchen 閱讀(8817) 評論(0)  編輯  收藏 所屬分類: 工作感悟
          主站蜘蛛池模板: 攀枝花市| 根河市| 桃园市| 乌兰浩特市| 慈溪市| 彰化县| 榆林市| 许昌市| 浦北县| 邳州市| 祁阳县| 磐石市| 双江| 鲜城| 曲沃县| 滦平县| 台东县| 达拉特旗| 宿迁市| 淮北市| 宣武区| 宁陕县| 溆浦县| 林西县| 纳雍县| 当阳市| 崇信县| 蒙阴县| 石泉县| 石城县| 南充市| 洪江市| 永平县| 泰兴市| 梓潼县| 和政县| 民乐县| 航空| 元江| 洛隆县| 宁陕县|