日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Native crash 处理案例分享

發布時間:2024/9/3 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Native crash 处理案例分享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:Android Native crash 處理案例分享

1. 背景

目前 mPaas[1] Android使用Crash SDK對閃退進行的處理,CrashSDK 是 Android 平臺上一款功能強大的崩潰日志收集 SDK,有著極高的崩潰收集率和完整、全面的崩潰日志信息,生成的日志內容非常利于問題的跟進和解決。在日常運維中,經常遇到一些閃退,無法直接從閃退堆棧找到原因,尤其是一些非Java的Native的閃退,這里分享下在mPaas框架下怎么使用Crash SDK分析閃退。

2. 閃退報文分析工具介紹

對于mPaas的用戶,從MAS上閃退分析平臺導出的一般是原始的閃退信息,閃退信息比較多,如果直接閱讀會比較困難,使用者可以通過下載Chrome的插件LogAnalyzer,LogAnalyzer會將Crash SDK生成的日志文本內容轉化成可視效果較強的 HTML 頁面展現,功能強大,主要包含:
1) 高亮顯示日志中重點信息,并使用不同顏色區分;
2) 支持日志內容整體結構預覽,快速定位重點內容;
3) 常見崩潰原因提醒;
安裝好chrome插件后,仍需以下配置:

1. 修改閃退文件后綴為 .txt

由于MAS默認下載的文件后綴是.dat,需改為.txt,否則 LogAnalyzer 無法識別。

2. 修改插件配置

由于 Chrome 默認權限限制,任何 Chrome 插件均默認無法訪問文件網址,需要在 Chrome 插件中進行如下操作。
1) 打開 Chrome 插件管理頁面 chrome://extensions/
2) 找到 LogAnalyzer 插件,點擊 “詳細信息" 進入設置:

3) 勾選“允許訪問文件網址”選項
4) 打開或者刷新日志頁面,LogAnalyzer 便可生效。

3. 生效效果

把日志文件直接拖到chrome后,可以看到右邊插件生效后,可以通過不同顏色顯示閃退信息的各個字段
首次打開后的使用說明如下:

正常查看閃退截圖如下:

3. 閃退分析舉例

我們經常在日常運維中遇到一些非Java的Native模塊閃退,比如UC。其實很多場景下,閃退的根因并不是UC,只是最后的閃退點在UC。以日常運維高頻的UC內核的閃退為例,對一些案例的處理分享如下。

1. java空指針導致UC閃退

在閃退點上可以看到以下閃退信息(已經隱藏客戶apk相關信息),暫無任何線索,繼續查看日志。

查看logcat節點信息時,首先看到關鍵字:begin to generate native report, 表示當前是閃退日志上報的日志,在往前看,logcat節點里打印了異常堆棧信息,從堆棧信息可以看到,由于precreate操作觸發了底層的空指針,從而導致初始化異常,觸發了閃退。解決方案為臨時關閉預創建,從而規避閃退。

從上面的案例可以看出,
1) Native的閃退原因不一定是Native模塊,有可能是java異常導致的。
2) begin to generate native report 附近可以查看閃退相關的logcat信息,協助定位閃退的上下文日志。

2. 上層OOM導致UC閃退

首先,查看上報的閃退點的日志,如下圖所示,閃退在RenderThread里,毫無頭緒。

其次,在logcat節點里查找begin to generate native report上報節點,可以看到大量的底層OOM的異常日志,基本確定是OOM的原因了,繼續查找OOM的觸發源頭。

點擊閃退里的內存節點,基本原因就比較清晰了,當前手機的vmsize基本已經到最大了,我們知道對于 32 位的進程,APP 可使用的 VmSize 最大為 3GB,不過當運行在 64 位 CPU 上時,VmSize 最大可超過 3GB,接近 4GB。但是由于內核需要占據一部分,以及不同的ROM版本的差別,有以下規律:android 8.1.0 及之后的系統,大部分 native oom crash 發生時 vmSize 分布在 3.5 - 3.9 G 的位置,相對較為集中。下面講解下如何解決OOM。

3. FD誤關導致UC閃退

日志如下圖所示,我大概只能看出SIGILL有可能是主動崩潰,崩潰ILL_ILLOPC表示非法操作。

然后我們繼續看logcat節點的begin to generate native report, 基本確認原因是為uc使用的FD對象被其他程序關閉。

隨后UC提供了帶FDscan的工具包,通過我們復現后發現,是由于UC調用shouldIntercept回調的輸入流對象被其他模塊close掉了,導致UC使用的時候發現FD對象已經被關閉,從而做了崩潰處理。最后的處理方案就變成了用戶解決其他模塊的誤關FD的問題。

4. 總結

綜合以上的case分析,在遇到Native模塊閃退的時候,一般如果從直接的閃退堆棧看不出原因的時候,不要心急,可以搜索begin to generate native report 找到崩潰上下文,多看看logcat閃退上下文的日志,會有一些收獲,同時對于oom類型的問題,可以結合當前內存統計來看。

我們是阿里云智能全球技術服務-SRE團隊,我們致力成為一個以技術為基礎、面向服務、保障業務系統高可用的工程師團隊;提供專業、體系化的SRE服務,幫助廣大客戶更好地使用云、基于云構建更加穩定可靠的業務系統,提升業務穩定性。我們期望能夠分享更多幫助企業客戶上云、用好云,讓客戶云上業務運行更加穩定可靠的技術。


原文鏈接:https://developer.aliyun.com/article/781273?

版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。

總結

以上是生活随笔為你收集整理的Android Native crash 处理案例分享的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。