之前做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里可以看到下面这样的输出:
引用
I/dalvikvm( 2596): Wrote stack traces to '/data/anr/traces.txt'
如果没有/data/anr 可能会失败。需要手动建一个目录
用adb把文件拉下来
引用
% adb pull /data/anr/traces.txt .
线程DUMP是以附加的形式打到 traces.txt上面的。所以要根据PID来确认。
这个对于 排查程序无响应很有帮助。
参考:http://stackoverflow.com/questions/13589074/how-to-make-java-thread-dump-in-android
打印出来的文件大致如下:
引用
----- 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)
分享到:
相关推荐
Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...
在示例中,通过一个bash脚本可以自动化地对多个Java进程执行jstack命令,收集输出到指定的日志文件中。脚本的主要步骤包括: 1. 获取所有名为java的进程的PID。 2. 对每个PID执行jstack命令,并将输出重定向到日志...
标题中的“图形界面分析threadump_jstack分析工具_包含jdk”指的是一个专用于分析Java应用程序线程堆栈信息的工具,该工具具有图形用户界面,能够帮助开发者更直观地理解和解决程序中的线程问题。这个工具包含了JDK...
在上述示例中,可以修改代码,让所有线程都先尝试获取锁A,然后再获取锁B,这样就不会形成循环等待,从而避免死锁。 总的来说,掌握`jstack`命令的使用对于Java开发人员来说至关重要,它能够帮助我们及时发现并解决...
4. **监控线程**:在MPP系统中,还有一些特殊的监控线程,如垃圾收集器、线程池管理线程等,jstack也会报告这些线程的状态,帮助我们评估JVM的运行状况。 在分析jstack输出时,我们需要注意以下几点: - **死锁...
- 通过`jstack`命令输出的信息,可以发现在某一时间段内有大量的GC线程在运行。 - 进一步分析`jstack`的输出,可以发现某段代码频繁地创建并释放大量的小对象,这些小对象会被加载到JVM的年轻代中。 - 当年轻代...
- **Deadlock**:死锁是线程间的资源争夺导致的僵局,每个线程都在等待其他线程释放资源,结果所有线程都无法继续执行。这是需要立即解决的严重问题,可通过`jstack`检查是否存在死锁线程。 - **Runnable**:线程...
在实际生产环境中,线程问题可能更加复杂,需要仔细分析`jstack`输出的线程堆栈信息,结合业务逻辑,逐步定位和解决问题。同时,优化代码、合理设计锁策略以及使用并发工具类(如`ConcurrentHashMap`、`...
本文将详细介绍`JStack`的使用方法及其在分析Java线程堆栈中的应用。 #### 二、JStack简介 `JStack`是Java Development Kit (JDK)的一部分,用于生成正在运行的Java应用程序的线程快照。这些快照提供了关于每个...
当两个或多个线程同时尝试获取对方持有的锁时,就会出现死锁情况,此时每个线程都在等待其他线程释放资源,从而导致程序停滞不前。 要分析这个问题,我们需要使用`jstack`工具。`jstack`是Java虚拟机自带的一个...
抓取jstack方法及解决system用户执行jstack命令权限问题, 打开cmd窗口,输入命令 jstack -l 49824>>C:/error01.txt 其中49824为tomcat8.0 的pid ; error01.txt 这个可以自己取名字 多输出几份jstack 文件,做比对...
例如,在jstack的输出中,可以看到两个线程“Thread-0”和“Thread-1”分别在等待“DeadLockDemo.java”文件中的某两行代码释放锁。 为了避免一次dump信息不足以确定问题,建议多次执行dump,最好是在不同的时间点...
5. 多次记录线程堆栈的快照,方面后续在快照中找对应的线程调用内容。 6. 使用 top 命令找到占用 CPU 较多时间的线程,具体命令为:top -p <PID> -H。 7. 找到目标线程的 PID,然后将 PID 转换为 16 进制,使用 ...
在Java编程环境中,了解JVM(Java虚拟机)中所有线程的活动状态对于调试多线程程序至关重要。本文将详细讲解如何查看JVM中的线程活动情况,并提供相关示例代码。 首先,Java提供了`java.lang.management....
windows系统jstack自动抓取脚本
`jstack` 目前仅在Solaris和Linux的JDK版本中可用。 #### 2. jconsole —— Java Control Console `jconsole` 是基于Java Management Extensions (JMX) 的实时图形化监控工具,它能够展示JVM的实时性能数据和资源...
在Java中,线程是程序执行的最小单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和一部分堆内存。Java提供两种创建线程的方式:继承Thread类或实现Runnable接口。创建线程后,可以调用start()方法启动...
当应用程序出现性能问题或疑似死锁时,开发者通常会使用`jstack`命令来生成线程堆栈,这是一个内置在JDK中的命令行工具。 TDA的使用流程如下: 1. **生成线程堆栈**:首先,你需要通过`jstack`命令对目标Java进程...
Broken pipe产生的原因通常是当管道读端没有在读,而管道的写端继续有线程在写,就会造成管道中断。(由于管道是单向通信的) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。
- **资源排序**:确保所有线程都按照同一顺序请求资源,可以避免死锁。 6. **工具支持**: 除了`jstack`,还有一些其他的工具和库可以帮助我们管理和防止死锁,例如VisualVM、JProfiler等,它们提供了更直观的...