android中的jstack,看看线程都在干嘛

之前做java开发的时候,遇到进程卡住的情况都会用jstack来打印一个进程里的线程活动情况。到了安卓开发,发现没有这个命令了,很不习惯。
google了一下,发现还是有办法的。

% adb shell ps | grep android.calendar
u0_a6 2596 127 912804 48296 ffffffff b6f62c10 S com.google.android.calendar

2596就是进程ID
% adb shell kill -3 2596

成功的话logcat里可以看到下面这样的输出:
[quote]I/dalvikvm( 2596): Wrote stack traces to '/data/anr/traces.txt'[/quote]
如果没有/data/anr 可能会失败。需要手动建一个目录

用adb把文件拉下来
[quote]% adb pull /data/anr/traces.txt .[/quote]

线程DUMP是以附加的形式打到 traces.txt上面的。所以要根据PID来确认。

这个对于 排查程序无响应很有帮助。

参考:http://stackoverflow.com/questions/13589074/how-to-make-java-thread-dump-in-android


打印出来的文件大致如下:[quote]
----- pid 155 at 2013-12-11 20:38:16 -----
Cmd line: system_server

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x40a3d460 self=0x12800
| sysTid=155 nice=0 sched=0/0 cgrp=default handle=1074083080
| schedstat=( 296672000 85598000 170 ) utm=19 stm=10 core=0
at com.android.server.SystemServer.init1(Native Method)
at com.android.server.SystemServer.main(SystemServer.java:1103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
at dalvik.system.NativeStart.main(Native Method)

"DhcpStateMachine" prio=5 tid=66 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x411a3b30 self=0x18dfa0
| sysTid=443 nice=0 sched=0/0 cgrp=default handle=1660872
| schedstat=( 3046000 48091000 54 ) utm=0 stm=0 core=0
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:118)
at android.os.Looper.loop(Looper.java:118)
at android.os.HandlerThread.run(HandlerThread.java:60)
[/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值