System_Server進程內(nèi)存溢出分析

問題背景

?近期測試同學(xué)反饋了兩臺機器不開機問題阿浓,一直定住在動態(tài)開機動畫界面疲陕,重啟設(shè)備后問題依然必現(xiàn)墓赴。問題有點不可思議,正常情況下渗钉,大部分此類問題在重啟設(shè)備后應(yīng)該會破壞現(xiàn)象的彤恶。對于必現(xiàn)問題,那就很慶幸晌姚,可以隨便折騰分析粤剧,有此果必有起因。

分析思路

  • 抓取開機Log
    首先根據(jù)main log信息挥唠,看到系統(tǒng)頻繁在GC操作抵恋,以及其他進程不斷被LowMemroyKiller,以下列出部分關(guān)鍵信息:
    lowmemorykiller.png
gc.png

?當卡住在動畫界面后宝磨,系統(tǒng)不再輸出log弧关,看上去就是定屏現(xiàn)象了,根據(jù)如上信息唤锉,懷疑是系統(tǒng)可用內(nèi)存不足世囊,導(dǎo)致了這一系列問題,但正常開機流程是不可能出現(xiàn)這種現(xiàn)象的哇窿祥。為了驗證懷疑株憾,還是用數(shù)據(jù)證明,有時候不能按照常理來解釋晒衩。重啟設(shè)備嗤瞎,不斷執(zhí)行dumpsys meminfo命令,實時輸出內(nèi)存信息听系。
?一看嚇一跳贝奇,system_server進程在開機過程中竟然達到400M左右,正常是在100M左右的靠胜。


meminfo.png
  • DDMS+MAT分析內(nèi)存溢出
    ?System_server進程內(nèi)存溢出了掉瞳,使用DDMS抓取system_server進程的內(nèi)存使用情況毕源,導(dǎo)出hprof格式文件。然后使用MAT來分析抓取的堆存儲文件hprof陕习。
    ?MAT霎褐,全稱為Memory Analysis Tool,是對內(nèi)存進行詳細分析的工具衡查,它是Eclipse的插件瘩欺,如果用Android Studio進行開發(fā)則需要單獨下載它,下載地址為:http://eclipse.org/mat/拌牲。
  1. DDMS生成hprof文件
    ?生成hpof文件主要分為以下幾個步驟:
    • 運行DDMS程序俱饿。
    • 選擇system_server進程,點擊Update Heap按鈕塌忽,開始進行追蹤拍埠。
    • 發(fā)生內(nèi)存溢出后,點擊Dump HPROP File按鈕結(jié)束追蹤土居,生成并保存hprof文件枣购,如下圖所示。
ddms.png

DDMS生成的hprof文件并不是標準的擦耀,還需要將它轉(zhuǎn)換為標準的hprof文件棉圈,這樣才會被MAT識別從而進行分析,可以使用Android SDK自帶的hprof-conv進行轉(zhuǎn)換眷蜓,路徑在sdk/platform-tools中分瘾,進入到該路徑執(zhí)行以下語句即可:

./hprof-conv '/home/wangjiaxi/will_one/wjx_log/l2_h/scan/64/11/hang/hprof/p2_pro_hprof/system_process.hprof' /home/wangjiaxi/will_one/wjx_log/l2_h/scan/64/11/hang/hprof/p2_pro_hprof/hprof/p2pro.hprof
  1. MAT分析hprof文件

?用MAT打開標準的hpof文件,選擇Leak Suspects Report選項吁系。這時MAT就會生成報告德召,如下圖所示。


mat.png
mat_bitmap.png

結(jié)果顯示汽纤,加載一個Bitmap對象時上岗,內(nèi)存竟然分配了150M,實在太可怕了

  • 結(jié)合代碼分析跟因

?Bitmap分配了150M內(nèi)存蕴坪,哪能分配這么大呢肴掷?
在細看main log信息,發(fā)現(xiàn)了一些貓膩背传,系統(tǒng)的density匪夷所思為30000捆等,設(shè)備是720X1280,應(yīng)該為320dpi才對续室。這個數(shù)值相差太大了。


activity_config.png

原來該設(shè)備rom版本開放了修改density接口給云端谒养,云端配置了density 30000推送修改了display_density_forced這個setting字段挺狰。


window_density.png

?至于為什么density修改了30000后明郭,一張Bitmap占用的內(nèi)存會達到150M呢,這就需要跟蹤Graphic系統(tǒng)的skia代碼丰泊,這里是最終計算一張圖片加載的時候系統(tǒng)分配內(nèi)存大小薯定。

后續(xù)會寫一篇關(guān)于這個Bitmap如何到底分配多大內(nèi)存的文章。

將density設(shè)置到正常值后瞳购,重啟開機即可恢復(fù)正常狀態(tài)话侄,所以不要濫用設(shè)置density數(shù)值,會影響資源加載時內(nèi)存分配情況学赛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末年堆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盏浇,更是在濱河造成了極大的恐慌变丧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢掰,死亡現(xiàn)場離奇詭異痒蓬,居然都是意外死亡,警方通過查閱死者的電腦和手機滴劲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門攻晒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人班挖,你說我怎么就攤上這事鲁捏。” “怎么了聪姿?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵碴萧,是天一觀的道長。 經(jīng)常有香客問我末购,道長破喻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任盟榴,我火速辦了婚禮曹质,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘擎场。我一直安慰自己羽德,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布迅办。 她就那樣靜靜地躺著宅静,像睡著了一般。 火紅的嫁衣襯著肌膚如雪站欺。 梳的紋絲不亂的頭發(fā)上姨夹,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天纤垂,我揣著相機與錄音,去河邊找鬼磷账。 笑死峭沦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逃糟。 我是一名探鬼主播吼鱼,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绰咽!你這毒婦竟也來了菇肃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后未檩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡笑跛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了聊品。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飞蹂。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翻屈,靈堂內(nèi)的尸體忽然破棺而出陈哑,到底是詐尸還是另有隱情,我是刑警寧澤伸眶,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布惊窖,位于F島的核電站,受9級特大地震影響厘贼,放射性物質(zhì)發(fā)生泄漏界酒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一嘴秸、第九天 我趴在偏房一處隱蔽的房頂上張望毁欣。 院中可真熱鬧,春花似錦岳掐、人聲如沸凭疮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽执解。三九已至,卻和暖如春纲酗,著一層夾襖步出監(jiān)牢的瞬間材鹦,已是汗流浹背逝淹。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桶唐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓茉兰,卻偏偏與公主長得像尤泽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子规脸,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容