美團技術文檔總結-crash

android crash治理:

我的crash治理:

  1. 代碼邏輯上的錯誤引發(fā)的crash-----修復并總結
  2. 兼容性問題導致的crash
  3. 內存導致的crash---內存問題可能引發(fā)卡頓碰凶、cpu增長砾省、oom

遇到一些和系統(tǒng)相關的問題,要去查看對應版本的源碼田轧,從源碼中查看可能出現(xiàn)問題的原因。

美團外賣總結

美團外賣Android Crash治理之路

常規(guī)crash
  1. NullPointerException 為初始化覆旱,或者在使用過程中未判空痘番,多線程變量可見性受到影響。

  2. IndexOutOfBoundsException等

系統(tǒng)crash

一些廠商經過系統(tǒng)定制導致的問題蝙茶,通過java hook 和native hook 的方式進行解決艺骂。
下面是常見的解決思路:

嘗試找到造成Crash的可疑代碼,看是否有特異的API或者調用方式不當導致的隆夯,嘗試修改代碼邏輯來進行規(guī)避钳恕。
通過Hook來解決,Hook分為Java Hook和Native Hook蹄衷。Java Hook主要靠反射或者動態(tài)代理來更改相應API的行為忧额,需要嘗試找到可以Hook的點,一般Hook的點多為靜態(tài)變量愧口,同時需要注意Android不同版本的API睦番,類名、方法名和成員變量名都可能不一樣耍属,所以要做好兼容工作托嚣;Native Hook原理上是用更改后方法把舊方法在內存地址上進行替換,需要考慮到Dalvik和ART的差異厚骗;相對來說Native Hook的兼容性更差一點示启,所以用Native Hook的時候需要配合降級策略。
如果通過前兩種方式都無法解決的話领舰,我們只能嘗試反編譯ROM夫嗓,尋找解決的辦法。

OOM

常見內存問題引發(fā)的oom

常見的 oom 問題一般分為

java 內存溢出
無連續(xù)可用空間
java.lang.OutOfMemoryError: Failed to allocate a 9224 byte allocation with 8384232 free bytes and 15MB until OOM; failed due to fragmentation (required continguous free 12288 bytes where largest contiguous free 8192 bytes)
FD 數量超出限制

線程數量超出限制

虛擬內存不足

進程間內存分配

image.png

cpu和gpu使用同一個RAM
RAM 分為多個“頁面”提揍。通常啤月,每個頁面為 4KB 的內存。

系統(tǒng)會將頁面視為“可用”或“已使用”劳跃』阎伲可用頁面是未使用的 RAM。已使用的頁面是系統(tǒng)當前正在使用的 RAM刨仑,并分為以下類別:

  • 緩存頁:有存儲器中的文件(例如代碼或內存映射文件)支持的內存郑诺。緩存內存有兩種類型:
    • 私有頁:由一個進程擁有且未共享
      • 干凈頁:存儲器中未經修改的文件副本夹姥,可由 kswapd 刪除以增加可用內存
      • 臟頁:存儲器中經過修改的文件副本;可由 kswapd 移動到 zRAM 或在 zRAM 中進行壓縮以增加可用內存
    • 共享頁:由多個進程使用
      • 干凈頁:存儲器中未經修改的文件副本辙诞,可由 kswapd 刪除以增加可用內存
      • 臟頁:存儲器中經過修改的文件副本辙售;允許通過 kswapd 或者通過明確使用 msync()munmap() 將更改寫回存儲器中的文件,以增加可用空間
  • 匿名頁:沒有存儲器中的文件支持的內存(例如飞涂,由設置了 MAP_ANONYMOUS 標記的 mmap() 進行分配)
    • 臟頁:可由 kswapd 移動到 zRAM/在 zRAM 中進行壓縮以增加可用內存

注意:干凈頁包含存在于存儲器中的文件(或文件一部分)的精確副本旦部。如果干凈頁不再包含文件的精確副本(例如,因應用操作所致)较店,則會變成臟頁士八。干凈頁可以刪除,因為始終可以使用存儲器中的數據重新生成它們梁呈;臟頁則不能刪除婚度,否則數據將會丟失。

https://developer.android.google.cn/topic/performance/memory-management

內存管理方案·

系統(tǒng)層面

  1. kswapd機制 共享頁官卡,匿名頁(臟頁蝗茁,干凈頁)
  2. LMK機制
  3. 配合框架自身的生命周期管理機制。
    內存回調:
    onTrimMemory寻咒,可以在 Application哮翘,Activiy,Service 和 ContentProvider 中重寫接口方法來實現(xiàn)內存變化的監(jiān)聽ComponentCallbacks2
public interface ComponentCallbacks2 extends ComponentCallbacks {

    /** @hide */
    @IntDef(prefix = { "TRIM_MEMORY_" }, value = {
            TRIM_MEMORY_COMPLETE,
            TRIM_MEMORY_MODERATE,
            TRIM_MEMORY_BACKGROUND,
            TRIM_MEMORY_UI_HIDDEN,
            TRIM_MEMORY_RUNNING_CRITICAL,
            TRIM_MEMORY_RUNNING_LOW,
            TRIM_MEMORY_RUNNING_MODERATE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface TrimMemoryLevel {}
    ..........
    void onTrimMemory(@TrimMemoryLevel int level);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末仔涩,一起剝皮案震驚了整個濱河市忍坷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熔脂,老刑警劉巖佩研,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異霞揉,居然都是意外死亡旬薯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門适秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绊序,“玉大人,你說我怎么就攤上這事秽荞≈韫” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵扬跋,是天一觀的道長阶捆。 經常有香客問我,道長,這世上最難降的妖魔是什么洒试? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任倍奢,我火速辦了婚禮,結果婚禮上垒棋,老公的妹妹穿的比我還像新娘卒煞。我一直安慰自己,他們只是感情好叼架,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布畔裕。 她就那樣靜靜地躺著,像睡著了一般乖订。 火紅的嫁衣襯著肌膚如雪柴钻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天垢粮,我揣著相機與錄音,去河邊找鬼靠粪。 笑死蜡吧,一個胖子當著我的面吹牛,可吹牛的內容都是我干的占键。 我是一名探鬼主播昔善,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼畔乙!你這毒婦竟也來了君仆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牲距,失蹤者是張志新(化名)和其女友劉穎返咱,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體牍鞠,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡咖摹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了难述。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萤晴。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胁后,靈堂內的尸體忽然破棺而出店读,到底是詐尸還是另有隱情,我是刑警寧澤攀芯,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布屯断,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏裹纳。R本人自食惡果不足惜择葡,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剃氧。 院中可真熱鬧敏储,春花似錦、人聲如沸朋鞍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥酥。三九已至更舞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坎吻,已是汗流浹背缆蝉。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘦真,地道東北人刊头。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像诸尽,于是被迫代替她去往敵國和親原杂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355