知道这个问题, 是前几天, framework 有人过来抱怨说 media 模块的 log 太多了, 总是按帧来刷log , 1秒能刷 200行, 会导致 logcat 从 logd 中读不到数据最终 logcat 进程退出: "
read: Unexpected EOF"
// MAGIC1. DO NOT TOUCH. BY 冗戈微言
http://blog.csdn.net/leonxu_sjtu/
开发阶段各模块的 debug 宏打开很正常, 现在接近收敛, 关 log 也无妨, 只是所描述的 logcat 进程退出的现象让我不理解, 我一年前刚领教过 Android 6.0 的 logd 更新导致的 log 丢失 ( 第一篇笔记, 2017年3月 ), 简单来说 log 刷多了就会有 socket 层面和 prune 层面的内容丢弃, 但 logcat 进程都直接搞退, 是没有任何印象的...
再说了, logd 丢失内容想想是很容易理解的, 系统负荷大时不丢弃, logcat 进程岂不是一直阻在那, 而且虽然 logd 丢的多, logcat 看起来很苟且, 但等系统缓过来, 工作频率上去了, logcat 还能继续正常工作; 但现在出现的现象是, logcat 进程都报错退出了... 这性质就严重了, 因为我们平台系统启动之后, 后台就起了一个进程一直 logcat 抓 log 导到文件, 以便测试方面反馈问题时, 提供 log 给研发这边分析, 而不用每次研发都再做复现, 但现在后台的 logcat 进程都报错退了, 退了之后的 log 就抓不到了, 而且退的悄声无息 ... 坑不坑? // MAGIC2. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
好吧, logca
开发阶段各模块的 debug 宏打开很正常, 现在接近收敛, 关 log 也无妨, 只是所描述的 logcat 进程退出的现象让我不理解, 我一年前刚领教过 Android 6.0 的 logd 更新导致的 log 丢失 ( 第一篇笔记, 2017年3月 ), 简单来说 log 刷多了就会有 socket 层面和 prune 层面的内容丢弃, 但 logcat 进程都直接搞退, 是没有任何印象的...
再说了, logd 丢失内容想想是很容易理解的, 系统负荷大时不丢弃, logcat 进程岂不是一直阻在那, 而且虽然 logd 丢的多, logcat 看起来很苟且, 但等系统缓过来, 工作频率上去了, logcat 还能继续正常工作; 但现在出现的现象是, logcat 进程都报错退出了... 这性质就严重了, 因为我们平台系统启动之后, 后台就起了一个进程一直 logcat 抓 log 导到文件, 以便测试方面反馈问题时, 提供 log 给研发这边分析, 而不用每次研发都再做复现, 但现在后台的 logcat 进程都报错退了, 退了之后的 log 就抓不到了, 而且退的悄声无息 ... 坑不坑? // MAGIC2. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
意料之内的, 应急的措施就是检查 logcat 进程返回值, 如果异常退出了就后台立刻重新再起一个 logcat 进程;
但现在将报错退出的原因定为 log 刷太多, 我去, 如前所述, 三年前 android 引入 logd 不就是为了 log 刷太多的时候做策略丢弃, 怎么三年后反而 logcat 都退了, google 越搞越挫了吗?
和 framework 的人沟通了一下, 他们得出这个结论的原因, 是因为尝试了 logcat -G 把 log buffer 开大, 可以显著的降低 Unexpected EOF 出现的概率, 所以觉得出错和 log buffer 有关, 于是建议大家清理 log , 但出错的原因, 还在查... // MAGIC3. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
嗯,我只想知道出错原因, 主要是似乎大家都不太关心原因, 他们关心 patch, 进程重启和加大 log buffer 的双保险, patch 足够了 ...好吧, logca