SWT 重启案例分析(四)


极力推荐文章:欢迎收藏
Android 干货分享

本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、TimeoutException 导致系统重启Log
二、TimeoutException 重启 trace 分析
三、TimeoutException 导致的重启解决方案
一、TimeoutException 导致系统重启Log

TimeoutException 导致系统重启

Systemserver TimeoutException
二、TimeoutException 重启 trace 分析

1090 线程 被线程134 held

线程134 被线程 92 held

线程 92 是卡住的主要原因 在
从重启的Jave Exception trace
看由于在ART GC
时,如果检查到某个对象其所属的类型override
了finalize
函数,会把这个对象添加到referenceQueue
中。
referenceQueue
被FinalizerDaemon
线程监控,如果里面有内容,就会逐个取出并调用其finalize
函数。
这样在下一次GC
的时候才真正的把这个对象占用的memory
给回收掉。
Java进程会默认等待10s
,如果10s
还没有执行完,进程会强制抛出TimeoutException
。
一般是由于当时系统IO忙
或者memory比较紧张
,导致不能及时唤醒这个线程及时往下执行。
三、TimeoutException 导致的重启解决方案
由TimeoutException
超时导致的系统重启,一般是由于当时系统IO忙
或者memory比较紧张
,没有太好的修改方案,只能增长超时时间,或者更换好一点的Memory
。
增长时间的修改方案如下
1. 修改 Daemons类
主要修改 Daemons.java
中的MAX_FINALIZE_NANOS
时间。Daemons
类 路径如下:/libcore/libart/src/main/java/java/lang/Daemons.java
private static final long MAX_FINALIZE_NANOS = 10L * NANOS_PER_SECOND;
修改为:
private static final long MAX_FINALIZE_NANOS = 15L * NANOS_PER_SECOND;
2.修改 ActivityMangerService
增长ActivityMangerService.java
中CONTENT_PROVIDER_PUBLISH_TIMEOUT
的时间。
ActivityMangerService
类路径如下:frameworks\base\services\core\java\com\android\server\am\ActivityMangerService.java
static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10*1000;
修改为
static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 15*1000;


长按识别二维码,领福利
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

小礼物走一走,来简书关注我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!