ANR trace详解

本文详细解读了traces.txt文件中记录的线程状态信息,包括SignalCatcher守护进程、线程优先级、线程ID、挂起计数等关键参数的含义及其在系统中的作用。特别关注了互斥锁(mutatorlock)在暂停所有线程过程中的重要角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Trace pattern

1."Signal Catcher" daemon prio=5 tid=3 Runnable
2.  | group="system" sCount=0 dsCount=0 obj=0x32c050d0 self=0x7f97dd1400
3.  | sysTid=9729 nice=0 cgrp=default sched=0/0 handle=0x7fa200e450
4.  | state=R schedstat=( 217991249 1074429 82 ) utm=15 stm=6 core=4 HZ=100
5.  | stack=0x7fa1f14000-0x7fa1f16000 stackSize=1005KB
6.  | held mutexes= "mutator lock"(shared held)

2. 解释

第1行:

“Signal Catcher”:线程名称,daemon:是否是daemon线程(如果不是,则不打印“daemon”),prio=5:java线程Thread对象中的优先级,tid=3:vm中对应的 threadid,Runnable:线程在虚拟机中的状态;(如果当前线程没有attach,则第一行显示: “name” prio=num (not attached));

第2行:

group: ThreadGroup,sCount: Suspend count, dsCount: debugger suspend count(小于等于sCount),obj:对应java线程 java.lang.Thread对象,self:native 对应的 thread 指针;

第3行:

sysTid:对应linux线程 tid, nice:线程调度执行优先级,cgrp: cgroup,cpu调度group,sched:调度策略和调度优先级,handle:当前线程对应的pthread_t

第4行:

state:linux线程的状态,schedstat:线程调度情况,utm=15:线程在用户态运行的时间, stm=6:线程在内核态运行的时间, core=4:线程最后运行在哪个cpu上, HZ=100:系统时钟频率

state=R 任务的状态,R:running, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead

第5行:

stack=0x7fa1f14000-0x7fa1f16000 stackSize=1005KB
线程栈的start 和 end,以及 stack size;

第6行:

held mutexes= “mutator lock”(shared held)
线程持有的当前虚拟机中的mutex的名称,及持有方式:shared held: 共享锁,exclusive held:独占锁;

每个线程在完成suspend时,都会把 “mutator lock”释放;

实际上,Suspend所有线程时,判断是否suspend完成,就是通过获取"mutator lock"独占锁来判断的,

如果能获取独占锁,说明其他线程都不再 独占/共享 持有 “mutator lock” ,说明所有线程suspend已经完成。

3. 关键词对照

关键词解释
prio优先级
tid线程id
group组名
sCount挂起次数
dsCount调试下 挂起计数
obj同辈线程对象
self当前线程对象
sysTid线程id
nice进程优先级
sched调度者优先级
cgrp调度者组名
handle线程缓存句柄
statenative线程状态
schedstat调度者状态
utm用户态CPU时间
stm内核态CPU时间
core运行所在核

参考

从源码角度看traces.txt是如何生成的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值