Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52721 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

练习Sample跑起来 | 热点问题答疑第2期

invalid page fault
major page fault
minor page fault
singleThread
sample app
实现代码
iowait
page faults
Threads
Process
Load Average
CPU Core
System TOTAL
分析
CPU usage
iowait
major page fault
案例分析
CPU数据采集工具
分享给好友
《性能之巅》
性能瓶颈
数据采集方式
文件特点
兼容处理
目录结构
数据来源
专栏第5期Sample
实践
孙鹏飞
相关资料
案例分析
/proc伪文件系统
热点问题答疑第2期
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是孙鹏飞。今天我们基于专栏第 5 期的练习 Sample 以及热点问题,我来给你做答疑。有关上一期答疑,你可以点击这里查看。
为了让同学们可以进行更多的实践,专栏第 5 期 Sample 采用了让你自己实现部分功能的形式,希望可以让你把专栏里讲的原理可以真正用起来。
前面几期已经有同学通过 Pull request 提交了练习作业,这里要给每位参与练习、提交作业的同学点个赞。
第 5 期的作业是根据系统源码来完成一个 CPU 数据的采集工具,并且在结尾我们提供了一个案例让你进行分析。我已经将例子的实现提交到了GitHub上,你可以参考一下。
在文中提到,“当发生 ANR 的时候,Android 系统会打印 CPU 相关的信息到日志中,使用的是ProcessCpuTracker.java”。ProcessCpuTracker 的实现主要依赖于 Linux 里的 /proc 伪文件系统(in-memory pseudo-file system),主要使用到了 /proc/stat、/proc/loadavg、/proc/[pid]/stat、/proc/[pid]/task 相关的文件来读取数据。在 Linux 中有很多程序都依赖 /proc 下的数据,比如 top、netstat、ifconfig 等,Android 里常用的 procrank、librank、procmem 等也都以此作为数据来源。关于 /proc 目录的结构在 Linux Man Pages 里有很详细的说明,在《Linux/Unix 系统编程手册》这本书里,也有相关的中文说明。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了关于CPU数据采集工具的实现原理和案例分析。文章首先介绍了在Android系统中,当发生ANR时,系统会打印CPU相关信息到日志中,使用的是ProcessCpuTracker的实现,依赖于Linux的/proc伪文件系统。然后对/proc目录的结构和数据采集方式进行了详细说明。接着,文章通过分析一段CPU usage的日志数据,解释了如何根据日志中的信息来猜测CPU使用情况,并用代码还原这个情景。文章还对page fault的类型和产生原因进行了详细解释,并结合具体案例分析了iowait数据。最后,文章给出了代码实现和抓取到的CPU数据,以及如何分析ANR日志中的相关数据来查找性能瓶颈。整体来说,本文通过实际案例和代码实现,帮助读者了解了CPU数据采集工具的原理和分析方法,对于想深入了解Android系统性能优化的技术人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Swing
    鹏飞模拟的这个例子,显示的都是minor fault,所以,而没有 major的统计,是因为文件系统的cache,还在等待批量写入磁盘吗?

    作者回复: io写文件的过程从虚拟内存的数据写入到pagecache里,由系统writeback,这块是不涉及到page fault统计的,例子里的minor fault也是由于开了一个12mb的数组,在填满的过程中产生的fault。所以那30次循环并不会增加minor fault的数量

    2019-02-13
    2
    1
  • Seven
    作业做完才发现鹏飞老师已经上传例子了。我只是参考了ProcessCpuTracker.java得到的数据是通过哪几个数据计算出来的,并没有参考上面的算法,因为开始兴高采烈的把ProcessCpuTracker.java的代码复制到项目中,项目一堆红线在我的脑门挂上了几条黑线。。。那时候就决定自己写,没想到确实可以利用ProcessCpuTracker.java里面的源码。 看到这句话“在不同的 Linux 内核中,该目录下的内容可能会有所不同”,才知道怪不得每个文档说的参数的含义不一样,原来内核不同。 想知道kernel这个数据代表什么意思,是怎么计算的
    2018-12-29
    1
  • 那这种需要怎么解决呢?
    2019-06-03
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部