
android稳定性
文章平均质量分 82
MrPeng1991
这个作者很懒,什么都没留下…
展开
-
稳定性二——JE流程及处理方法
这里,RunntimeInit初始化了两个handler,一个是preHandler(LoggingHandler),一个是defaultHangler(KillApplicationHandler)。两个类都继承于Thread.UncaughtExceptionHandler,实现其中的uncaughtException方法。原创 2024-08-02 00:06:32 · 720 阅读 · 0 评论 -
ptrace
进程状态S:Interruptible Sleeping,即可中断睡眠;D:Uninterruptible Sleeping,即不可中断睡眠;R:Running or Runnable,即运行状态;Z:Zombie,即僵尸状态;T:Stopped or Traced,即中止状态(注意是“中止”而非“终止”)。execl语句可以将当前进程替换成一个新进程。在本例中,execl(“/bin/ls”, “ls”, “-l”, “-h”, NULL);语句将原本的子进程替换成了一条ls命令。原创 2024-07-31 23:54:35 · 514 阅读 · 0 评论 -
backtrace
arm平台的调用栈与x86平台的调用栈大致相同,稍微有些区别,主要在于栈帧的压栈内容和传参方式不同。在arm平台的不同程序,采用的编译选项不同,程序运行期间的栈帧也会不同。有些工具在对arm的调用栈回溯时,可能会遇到无法回溯的情况。例如gdb在使用bt查看core dump文件调用栈时,有时会出现的情况,有可能就是栈空间的压栈顺序导致的。当工具无法回溯时,就需要人工结合汇编代码对栈进行回溯,或者使用unwind进行回溯。原创 2024-07-27 12:13:04 · 518 阅读 · 0 评论 -
一个死锁的案例
但是实际上,这个第二次的 log 意义并不大,因为这个时候系统 ANR,需要检查的是系统为什么出现 ANR,也就是说第一次 traces 的log 可能在后面的 debug 中起到关键因素。是在 startService() 的时候占用了AMS 这把锁,但是后面又在等 PermissionDialogReqQueue 的锁,这个锁是自己锁上的并没有放出来,导致了一连串的死锁。同样的,根据上面第 1.5 点,来看下 AMS 中的Handler 也触发了 WatchDog。原创 2024-07-09 01:13:49 · 263 阅读 · 2 评论 -
ANR日志输出
总结一下上面代码,这段代码并没有真正的执行dump操作,只是确定了trace文件路径,如果”dalvik.vm.stack-trace-dir”这个属性没有配置,就使用旧的dump策略,trace信息写入到全局trace文件/data/anr/traces.txt中,删除旧的traces文件,创建新的traces文件;5. 我们需要通过源码可以发现,当发生的是后台进程ANR,会少收集很多的信息,比如CPU使用率,CPU占比较高的5个应用,NATIVE进程情况。,此时需要结合eventlog进一步分析。原创 2024-07-09 00:45:19 · 924 阅读 · 0 评论 -
perfetto详解
可以将Perfetto理解为systrace的升级版,用在更新的平台、新图表展示更多的信息。它可帮助开发者收集 Android 关键子系统(如SurfaceFlinger/SystemServer/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。原创 2024-03-16 21:24:53 · 1794 阅读 · 0 评论 -
快稳省工具总结
ftrace、原创 2024-03-16 21:21:42 · 445 阅读 · 0 评论 -
稳定性三——wachdog机制与分析方法
最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正常工作,因此,引入了一个“看门狗”,对单片机的运行状态进行实时监测,针对运行故障做一些保护处理,譬如让系统重启。这种Watchdog属于硬件层面,必须有硬件电路的支持。Linux也引入了Watchdog,在Linux内核下,当Watchdog启动后,便设定了一个定时器,如果在超时时间内没有对/dev/Watchdog进行写操作,则会导致系统重启。原创 2024-03-10 22:35:09 · 1655 阅读 · 0 评论 -
JE调用流程
1.1LoggingHandlerUncaughtExceptionHandler只定义了一个接口方法 当线程因为未捕获的异常停止时,Java 虚拟机会调用 uncaughtException() 函数。可以看出,uncaughtException() 是在crash 最开始调用的,用以输出crash 开头信息1.3 KillApplicationHandlerKillApplicationHandler 类,以及构造中传入的LoggingHandler,都是实现UncaughtExceptio原创 2024-01-21 22:43:12 · 934 阅读 · 0 评论 -
稳定性一——ANR
如果有发现某个线程的堆栈,包含此字样,可进一步看其堆栈,确定是调用了什么系统服务。main log可以得到anr基本信息,要得到阻塞的地方,还得靠trace文件,一般在/data/anr目录下,可在找个trace文件中搜索主线程堆栈。可知80这个等级是很严重的,应用马上就要被杀死,被杀死的这个应用从名字可以看出来是桌面,连桌面都快要被杀死,那普通应用能好到哪里去呢?可以从log中看到,发生anr的时候,Top进程的Cpu占用情况,user代表是用户空间,kernel是内核空间,一般的有如下的规。原创 2023-10-27 00:51:23 · 878 阅读 · 0 评论