关于Android logcat可读缓冲区大小大于总缓冲区大小的疑问
关于Android logcat可读缓冲区大小大于总缓冲区大小的疑问
嘿伙计,我猜你看到这个logcat输出时肯定跟我一样懵——最近我在自己的三星Galaxy S10 Lite上运行了adb logcat -g命令,结果出来的数值直接打破了我对logcat缓冲区的认知,先给你看看具体输出:
main: ring buffer is 5 MiB (4 MiB consumed, 20 MiB readable), max entry is 5120 B, max payload is 4068 B system: ring buffer is 2 MiB (1 MiB consumed, 10 MiB readable), max entry is 5120 B, max payload is 4068 B crash: ring buffer is 512 KiB (128 KiB consumed, 43 KiB readable), max entry is 5120 B, max payload is 4068 B kernel: ring buffer is 4 MiB (0 B consumed, 0 B readable)
你看,main缓冲区的总大小才5MiB,可标注的“readable”(可读大小)居然达到了20MiB,这明显不符合逻辑啊——正常来说,可读的内容怎么可能超过缓冲区本身的总容量?
其实这锅得甩给厂商的定制ROM。原生Android的logcat逻辑里,可读大小绝对不会超过缓冲区的总大小,但像三星这类厂商会对系统服务做自定义修改,这里的异常大概率是两种情况:
- 要么是厂商调整了log服务的统计逻辑,把“readable”的范围扩大了,比如包含了已经归档到本地存储的历史日志,而不只是内存里的环形缓冲区内容;
- 要么就是定制ROM里的logcat输出统计出了bug,纯纯是数值显示错误而已。
要是你实在担心这个异常数值影响日志采集,完全可以自己验证:用adb logcat -d > test_log.txt把当前日志导出到文件,然后看这个文件的实际大小,你会发现它其实更接近缓冲区的总大小(比如main区的5MiB左右),根本到不了显示的20MiB。
说白了,这个“readable”的异常数值就是定制ROM的小问题,不用太较真,实际能获取的日志量还是以缓冲区总大小为准。
备注:内容来源于stack exchange,提问作者Vishnubly
相关产品推荐
相关产品推荐

