應用穩定性優化1:ANR問題全面解析

閃退、崩潰、無響應、重啟等是應用穩定性常見的問題現象,穩定性故障大體可歸類為ANR/凍屏、Crash/Tombstone、資源泄露三大類。本文通過對三類故障的產生原因、故障現象、觸發機制及如何定位等,展開深度解讀。

本文將詳解ANR類故障,并通過一個Binder阻塞問題案例,演示如何有效定位ANR類故障。

1、ANR問題原因分析

在這里插入圖片描述

2、ANR問題定位方法

1)打開system_app_anr@XXXX文件,查看ANR發生進程、進程號、主線程狀態,是不是有明顯的死鎖或者明顯binder調用阻塞;
2)如果是死鎖,看業務代碼即可;
3)如果是binder阻塞,查看binder調用鏈信息,查找對端進程及其對端進程調用stack,找到阻塞函數,如果system_app_anr@XXXX被截斷,可以查看traces.txt文件;
4)如果是nativepollonce,可以查看BlockMonitor日志,是否主線程有比較耗時的操作;CPU占用率情況,iowait情況;最有效的是分析systrace日志;
5)如果system_app_anr@XXXX中沒有發生anr的調用stack,一般是三種情況:

ANR進程處于D state,導致無法響應SIG 3信號,從而導致無法打印stack,可以通過sysrq信息確認;
ART處于死鎖狀態,由于ART本身bug導致無法處理SIG 3操作;
ANR進程獲取不了足夠的時間無法打印調用stack。

3、Binder阻塞ANR案例分析

3.1 ANR主棧分析

可以明確,這個ANR發生的原因,是Binder阻塞:

圖片

此時主線程,阻塞在isCoverOpen函數。

3.2 Binder阻塞分析

查找對應的binder transaction信息,分析binder被阻塞的原因。

(1)確認ANR發生的binder

圖片

阻塞的binder是aod發生給systemserver的,但看不到systemserver的Binder線程,故需要看看systemserver的Binder情況。

(2)確認對端binder

分析2618的主棧。

圖片

在binder transcation表中可以看到,systemserver進程的16個Binder線程,全部被阻塞在給hwfacerecognize發送消息。

在Android中一個進程最多會使用16個binder線程,systemserver的全部Binder線程都被阻塞,故不能再分配Binder線程處理其他的Binder消息,導致其他進程給systemserver發送Binder消息時是會被阻塞,且沒有對端binder線程的。

故問題的焦點,轉移到了hwfacerecognize(PID 727)的進程上。

圖片

(3)業務代碼分析

hwfacerecognize(PID 727)是人臉識別的進程,聯合人臉識別模塊的分析,發現是727進程出現crash。

圖片

穩定性優化需要開發者持續運營和維護,并對穩定性涉及的多項知識領域進行了解,才能更好的設計出穩定性優化方案,進而提升用戶使用體驗。

轉載學習:https://mp.weixin.qq.com/s?__biz=MzIzODM4NTkxNA==&mid=2247493852&idx=1&sn=3e4d0dd17601fd84550073cb00e600e2&chksm=e9388749de4f0e5f5a5c91b0bf05dffa809409b25762a7743c6e34d6498750a4e3be2bbc55c7&scene=21#wechat_redirect

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711709.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

寶塔php站點設置偽靜態規則 訪問 a.com 時候跳轉到 a.com/b.html

要在寶塔 PHP 站點中設置偽靜態規則,實現訪問a.com時跳轉到a.com/b.html,可以按照以下步驟進行操作: 打開寶塔面板并登錄到你的服務器管理界面。進入網站設置頁面,找到你要設置偽靜態規則的 PHP 站點。在站點設置中,找…

已解決System.ServiceModel.EndpointNotFoundException端點未找到異常的正確解決方法,親測有效!!!

已解決System.ServiceModel.EndpointNotFoundException端點未找到異常的正確解決方法,親測有效!!! 目錄 問題分析 出現問題的場景 報錯原因 解決思路 解決方法 總結 在開發和使用基于Windows Communication Foundation (WC…

【前端素材】推薦優質后臺管理系統cassie平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面,通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面,使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…

解鎖AI大模型秘籍:未來科技的前沿探索

在當今這個技術高速發展的時代,人工智能(AI)已經成為了我們生活中不可或缺的一部分。從簡單的個人助手到復雜的數據分析和決策制定,AI的應用范圍日益擴大,其目的是為了讓我們的生活變得更加智能化。本文旨在探討AI如何…

【單片機學習的準備】

文章目錄 前言一、找一個視頻是二、畫圖軟件三、裝keil5 仿真protues總結 前言 提示:這里可以添加本文要記錄的大概內容: 項目需要: 提示:以下是本篇文章正文內容,下面案例可供參考 一、找一個視頻是 https://www.b…

一文了解Lint工具的優缺點,以及它與高級靜態分析工具的比較

避免軟件缺陷是所有開發者的共同追求,因為一旦出現錯誤,可能導致用戶體驗下降,甚至威脅到關鍵系統的安全。不論您正在開發何種類型的程序,避免這些缺陷都是至關重要的。這就是為什么許多開發團隊都依賴Lint。 什么是Linting&#…

農產品質量追溯系統—簡介

概要 農產品質量安全事關廣大人民群眾的食用安全和身體健康。解決農產品質量安全問題,需要從源頭開始抓好、抓實農產品安全監管工作。通過建立從產地到市場的全程質量控制系統和追溯制度,對農產品產地環境、生產過程、產品檢測、包裝盒標識等關鍵環節進行監督管理,提高廣大…

Kubernetes(k8s第一部分)

這個技術一定會成為以后企業技術的標準 尙硅谷的王陽這個部分這個講的特別好,可以自己去看 1,發展經歷 阿里云iaas Infrastructure as a Service 平臺及服務paas新浪云 platform as a service(號稱免運維)(docker是下一代的標準&#x…

模板初階的補充和string一些函數的用法

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 模板初階的補充 一、C語言中的字符串 二、標準庫中的string類 2.1 string類(了解) 2.2 string類的常用接口說明(注意下面我只講解最常用的接口&…

SpringBoot中自動裝配機制

自動裝配簡單來說,就是自動去把第三方組件的Bean裝載到IoC容器里面,不需要開發人員再去寫Bean相關的一個配置。在Spring Boot的應用里面,只需要在啟動類上去加上Spring Boot Application注解就可以去實現自動裝配,Spring Boot App…

精品ssm的社區團購系統購物商城小程序

《[含文檔PPT源碼等]精品基于ssm的社區團購系統[包運行成功]》該項目含有源碼、文檔、PPT、配套開發軟件、軟件安裝教程、項目發布教程、包運行成功! 軟件開發環境及開發工具: Java——涉及技術: 前端使用技術:HTML5,CSS3、Jav…

Sophon AutoCV推動AI應用從模型生產到高效落地

隨著技術市場和應用方向的逐漸成熟,人工智能與各行各業的結合和落地逐漸進入了深水區。 雖然由于行業規模化和應用普及度的限制,人工智能在“傳統”行業的落地不如消費互聯網行業,但是借助人工智能為“傳統”行業的發展注入新能量一直是相關…

流程的Python(十五)-上下文管理器和else塊

一、核心要義 1. for, while和try語句的else字句 2. with語句和上下文管理器 二、代碼示例 1、else塊 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024/2/28 20:14 # Author : Maple # File : 01-else塊.py # Software: PyCharm""" 用…

lottie加載帶圖片的json 預覽

背景 產品看到一款app的動效很不錯,讓我去模仿實現。 第一步 獲取apk中的靜態資源 拿到這個app的apk后,直接使用壓縮工具解壓, assets文件夾就是靜態資源的目錄 靜態資源里面有lottie 那么大部分的動效應該都是lottie實現的 網上找了很多…

一些常見的SpringBoot面試題

以下是一些常見的SpringBoot面試題: 1. 什么是SpringBoot? * SpringBoot是一個開源的Java框架,用于簡化Spring應用程序的創建和部署。它提供了許多內置的功能,如自動配置、嵌入式Web服務器、安全性、健康檢查等,使得…

經銷商文件分發 怎樣兼顧安全和效率?

經銷商文件分發是指將文件、資料、產品信息等從制造商或經銷商傳遞給經銷商的過程。這一過程對于確保經銷商能夠獲取最新的產品信息、銷售策略、市場活動資料等至關重要。 想要管理眾多經銷商合作伙伴之間的文件傳輸并提高效率,可以采取以下措施: 1、建…

機器學習 -- 梯度下降算法加深

梯度下降算法 在機器學習中,梯度下降算法常用于最小化代價函數(或損失函數),以此來優化模型的參數。代價函數衡量的是模型預測值與實際值之間的差異。通過最小化這個函數,我們可以找到模型預測最準確的參數。 代價函…

數字快速增長動畫插件vue-countupjs

使用場景: ①頁面加載時實現數字從0開始滾到指定數字 ②大屏數字的滾動增長 1.安裝vue-countupjs npm install vue-countupjs --save 2.使用 ①全局使用 main.js引入 import VueCountUp from vue-countupjs Vue.use(VueCountUp) Vue.component(VueCountUp, Vue…

Mybatis-Plus-快速整合

Mybatis-Plus 依賴 依賴選擇 <!-- 最新版本 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version> </dependency>配置 分頁 分頁攔截器配置…

易毅出席成套低溫烘干裝備在發酵行業的節能創新應用

演講嘉賓&#xff1a;易毅 總經理 廣東芬藍環境科技有限公司 演講題目&#xff1a;成套低溫烘干裝備在發酵行業領域的節能創新應用 會議簡介 “十四五”規劃中提出&#xff0c;提高工業、能源領城智能化與信息化融合&#xff0c;明確“低碳經濟”新的戰略目標&#xff0c;熱…