0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android开发中如何解决典型场景缺通用日志的问题

麦辣鸡腿堡 来源:OPPO内核工匠 作者:marc 2023-11-23 17:39 次阅读

下面针对一些典型场景缺通用日志(android/kernel)的问题,一一列举如下,希望可以让大家关注到缺日志的真实原因。如下问题也提醒各位工程师:谨慎添加日志,不要随意添加,否则即容易造成自己的日志缺失也会导致其他业务模块丢失日志。

通用日志丢失目前有如下情况会出现:

(1)liblog通过socket传输日志时失败,此时在event日志中会记录类似上图中tag=liblog的埋点。具体见4.1、4.2节内容。

(2)其它进程通过socket读取logd的日志时,此时由于日志打印速度过快,读取速度跟不上写入速度,造成了部分历史日志被丢弃的情况,此时在event日志中会记录tag=chatty的埋点。此种情况遇到较少。

(3) logd buffer中日志内存超过buffer大小了,则会按照每次裁剪日志的行数等于日志总行数的10%,并且会大于等于4行,小于256行。环形buffer大小超过了,会不断循环裁剪。

(4) 文件存储问题,导致日志内容无法落盘至日志文件。具体见4.3节内容。

(5) 低内存查杀日志进程,导致日志内容无法落盘。具体见4.4节内容。

日志丢失的问题可能不止以上原因,基本分析思路是首先了解问题发生场景及时间点,然后通过日志抓取和落盘场景进行分析,参考业务日志打印频率、logd的状态(logd的cpu负载、运行状态)、系统的异常状态(严重低内存、整机CPU负载高、文件系统异常、温度过高限频限核)等综合原因,得出问题分析结论。往往日志缺失和系统状态联系较为紧密,所以分析此类问题,就要具备开阔的视野,能够及时联想到有关整机各个状态,推测和佐证自己的分析原因和得出的结论。具体分析过程,也可以参考思维导图。

图片

下面针对以上内容,列举如下几个典型案例,仅供大家参考。

4.1 业务日志输出频率太高

(1) events日志出现大量丢弃日志打印

(2) 查看android日志,发现sensor日志打印量非常大,基本达到刷屏的程度

(3) android日志输出频率达4229条/秒,日志输出频率非常大,sensor日志打印处于top1,达到2418条/s。

总结:sensor日志打印频率太高,超过了socket的处理能力,不能及时处理只能先行丢掉。故导致部分日志丢失。

4.2 整机负载高

(1) 输出的日志出现大量的日志丢失内容

(2) 查看日志打印频率,发现日志输出频率较低

(3) 查看systrace发现整机负载高达90%以上,logd一直处于runanble状态,整机温度也较高导致触发了限频限核。

总结:logd一直处于runnable状态,导致logd无法获得cpu时间片执行日志操作,容易出现socket通信失败,故导致部分日志丢失。

4.3 存储异常导致

(1) 查看日志发现mmap异常

(2) 由于没有过多日志打印,故本地使用adb logcat抓取日志分析

总结:文件存储出现问题,日志无法输出到对应的文件中,日志信息无法得到落盘,故出现日志内容大量丢失。

4.4 低内存导致

(1) 日志文件为空

图片

(2) kernel日志中发现打印日志进程被杀

图片

(3) 查看内存,已经处于低内存状态

图片

总结:低内存导致日志进程被杀,出现日志文件无对应的日志信息落盘,故出现日志内容丢失。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3923

    浏览量

    127127
  • 文件
    +关注

    关注

    1

    文章

    561

    浏览量

    24695
  • 日志
    +关注

    关注

    0

    文章

    138

    浏览量

    10632
收藏 人收藏

    评论

    相关推荐

    Android基础及典型案例开发指南》--创新移动开发系列

    `《Android基础及典型案例开发指南》--创新移动开发系列 Android基础篇+经典开发
    发表于 08-07 22:18

    推荐一本书《android应用程序开发典型案例》完整版PDF下载

    android应用程序开发典型案例》图书简介:共23章,内容包含两大部分。第一部分是android程序设计基础,在介绍android环境
    发表于 09-28 10:29

    消息队列的应用场景

    、流量削锋  流量削锋也是消息队列的常用场景,一般在秒杀或团抢活动中使用广泛!  应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列
    发表于 06-23 10:19

    简洁易用的日志系统 ulog 日志

    ulog 日志ulog 简介日志的定义:日志是将软件运行的状态、过程等信息,输出到不同的介质(例如:文件、控制台、显示屏等),并进行显示和保存。为软件调试、维护过程
    发表于 03-29 06:40

    Android基础及典型案例开发指南》--创新移动开发系列

    Android基础及典型案例开发指南》--创新移动开发系列
    发表于 02-08 00:32 11次下载

    Android系统的日志模式选择机制

    在写磁盘的过程如果意外掉电或系统崩溃很有可能导致文件系统中用户数据和元数据不一致,现有文件系统主要采取写前日志或写时拷贝等一致性技术来解决该问题,但均没有考虑目录对可靠性需求的差异性。针对现有
    发表于 01-03 14:46 0次下载
    <b class='flag-5'>Android</b>系统的<b class='flag-5'>日志</b>模式选择机制

    fireflyCORE-3399PRO主板JD4--Android开发

    Android开发 ADB 使用 前言 adb,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统
    的头像 发表于 12-17 16:30 1648次阅读

    基于时间卷积网络的通用日志序列异常检测框架

    基于循环神经网络的日志序列异常检测模型对短序列有较好的检测能力,但对长序列的检测准确性较差。为此,提出一种基于时间卷积网络的通用日志序列异常检测框架。将日志模板序列建模为自然语言序列,
    发表于 03-30 10:29 8次下载
    基于时间卷积网络的<b class='flag-5'>通用</b><b class='flag-5'>日志</b>序列异常检测框架

    基于Android开发的ADT获取内存的敏感信息

    Eclipse上的开发工具。目前Android开发所用的开发工具主要有Android Studio 、intellij idea、Eclip
    的头像 发表于 09-06 15:22 1151次阅读

    Android异常日志快速定位分析小技巧

    Android异常日志快速定位分析小技巧
    的头像 发表于 08-09 10:06 2673次阅读
    <b class='flag-5'>Android</b>异常<b class='flag-5'>日志</b>快速定位分析小技巧

    C++异步日志实践

    文件,在日志产生不频繁的场景下没什么问题 可是,如果日志打印很频繁,同步日志有什么问题? 一方面,大量的日志打印陷入等量的write系统调用
    的头像 发表于 11-09 10:29 638次阅读
    C++异步<b class='flag-5'>日志</b>实践

    Android开发日志接口介绍

    、LOG_ID_RADIO、LOG_ID_EVENTS、LOG_ID_SYSTEM、 LOG_ID_CRASH。 1.1.1 日志缓冲区简介 Android日志记录系统守护进程logd维护的一组结构化环形缓冲区,这组可用的缓冲区
    的头像 发表于 11-23 16:27 1048次阅读
    <b class='flag-5'>Android</b><b class='flag-5'>开发</b><b class='flag-5'>中</b>的<b class='flag-5'>日志</b>接口介绍

    Android日志与logd交互过程

    2.2.3 Android日志与logd交互过程 2.2.3.1 Android日志传递给logd Android app层或framewo
    的头像 发表于 11-23 17:06 873次阅读
    <b class='flag-5'>Android</b><b class='flag-5'>日志</b>与logd交互过程

    鸿蒙OS开发典型页面场景【一次开发,多端部署】(功能开发

    应用开发至少包含两部分工作: UI页面开发和底层功能开发(部分需要联网的应用还会涉及服务端开发)。前面章节介绍了如何解决页面适配的问题,本章
    的头像 发表于 05-28 17:32 518次阅读
    鸿蒙OS<b class='flag-5'>开发</b>:<b class='flag-5'>典型</b>页面<b class='flag-5'>场景</b>【一次<b class='flag-5'>开发</b>,多端部署】(功能<b class='flag-5'>开发</b>)

    日志篇:模组日志总体介绍

    ​今天我们学习合宙模组日志总体介绍,以下进入正文。 一、本文讨论的边界 本文是对合宙 4G 模组, 以及 4G+GNSS 模组的日志功能的总体介绍。通过日志,可以对研发过程,以及模组
    的头像 发表于 10-24 07:16 146次阅读
    <b class='flag-5'>日志</b>篇:模组<b class='flag-5'>日志</b>总体介绍