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

    文章

    3886

    浏览量

    126102
  • 文件
    +关注

    关注

    1

    文章

    541

    浏览量

    24467
  • 日志
    +关注

    关注

    0

    文章

    127

    浏览量

    10558
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    使用android studio做应用开发,将项目导入android studio,编译的时候出现错误这是为什么?如何解决?

    本帖最后由 一只耳朵怪 于 2018-6-8 09:43 编辑 我们使用android studio做应用开发,将项目导入android studio,编译的时候报如下错误,希
    发表于 06-07 09:33

    消息队列的应用场景

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

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

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

    在芯片设计过程CDC有哪几种典型的错误场景

    CDC典型错误案例是什么?在芯片设计过程,CDC有哪几种典型的错误场景
    发表于 09-15 07:15

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

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

    android开发常用词汇

    android开发是指android平台上应用的制作,Android早期由“Android之父”之称的Andy Rubin创办,Google
    发表于 12-21 12:15 4693次阅读

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

    的文件自适应日志模式存在的需要逐一修改应用程序的不足,提出了面向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 1447次阅读

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

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

    C++异步日志实践

    文件,在日志产生不频繁的场景下没什么问题 可是,如果日志打印很频繁,同步日志有什么问题? 一方面,大量的日志打印陷入等量的write系统调用
    的头像 发表于 11-09 10:29 384次阅读
    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 636次阅读
    <b class='flag-5'>Android</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 470次阅读
    <b class='flag-5'>Android</b><b class='flag-5'>日志</b>与logd交互过程

    logcat命令抓取日志方法

    命令抓取日志 logcat -b main -b system -b crash -r 1024 -n 5 -f android.log -v threadtime -b:加载可供查看的缓冲区的日志
    的头像 发表于 11-23 17:31 715次阅读
    logcat命令抓取<b class='flag-5'>日志</b>方法