`
san_yun
  • 浏览: 2655082 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

通过jmx查看thread死锁

 
阅读更多

ThreadMXBean tm = ManagementFactory.getThreadMXBean();
tm.setThreadContentionMonitoringEnabled(true);
long [] tid = tm.getAllThreadIds();
ThreadInfo [] tia = tm.getThreadInfo(tid, Integer.MAX_VALUE);

long [][] threadArray = new long[tia.length][2];

for (int i = 0; i < tia.length; i++) {
long threadId = tia[i].getThreadId();

long cpuTime = tm.getThreadCpuTime(tia[i].getThreadId())/(1000*1000*1000);
threadArray[i][0] = threadId;
threadArray[i][1] = cpuTime;
}


检测到如下线程问题:
Thread ID: 89
Thread Name: http-6080-Processor73
Thread State: RUNNABLE
Thread Lock Name: null
Thread Lock Owner Name: null
Thread CPU Time: 35678 sec
Stack Info: (depth:31)
+java.util.HashMap.get(HashMap.java:303)
+com.netqin.baike.server.nqrs.CloudSecurityCommand.writePkgsLog(CloudSecurityCommand.java:466)
+com.netqin.baike.server.nqrs.CloudSecurityCommand.execute(CloudSecurityCommand.java:153)
+com.netqin.baike.server.BaikeServer.service(BaikeServer.java:64)
+sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
CPU占用时间达到 35678秒 ,到下午到了50000秒左右,tomcat的CPU占用达到了200%
分析代码,发现是单例bean中使用了 hashmap 作为类对象,多线程访问时 类成员hashmap并不是线程安全的 非单例,引起了问题。更正代码后,几个月没有发现问题

来源:http://shenguanpu.blogbus.com/logs/159954429.html
分享到:
评论

相关推荐

    java 内存dump分析和thread dump(java core)分析

    通过JMX连接到运行中的JVM进行实时监控。 3. **YourKit Java Profiler**:一款强大的商业工具,提供详细的内存分配和存活路径分析,界面友好且功能强大。 4. **JProfiler**:另一款强大的商业Java性能分析器,支持...

    java 监控线程

    1. **死锁检测**: 使用jstack或VisualVM,可以查看线程的锁持有状态,找出可能存在的死锁。 2. **线程Dump分析**: 当程序出现异常或者性能下降时,线程Dump可以帮助分析当前所有线程的状态,找出阻塞的原因。 3. *...

    TDA-Thread Dump Analyzer - tda-bin-2.3.3.zip

    1. **获取线程Dump**: 可通过操作系统命令(如`jstack`)或者JVM内置的监控接口(如JMX)来获取线程Dump。 2. **导入到TDA**: 将获取的dump文件导入到TDA中,软件会自动解析文件内容。 3. **分析与解读**: 使用TDA...

    IBMThreadDumpAnalyzer.zip

    要使用IBM Thread Dump Analyzer,你需要首先获取线程dump,这可以通过在JVM命令行发送特定信号(如在Unix/Linux上使用`kill -3 &lt;pid&gt;`,在Windows上使用`Ctrl+Break`)或通过JMX接口实现。然后,将dump文件导入到...

    Java多线程的监控分析工具(VisualVM).doc

    3. **线程转储(Thread Dump)**:通过生成线程转储文件,开发者可以查看在特定时刻所有线程的详细信息,包括调用栈,这有助于定位导致阻塞或挂起的问题。 4. **堆转储(Heap Dump)**:当遇到内存泄漏问题时,可以使用...

    thread-monitor:线程监视器桌面 Java 应用程序

    1. **连接到目标应用程序**:线程监视器需要连接到正在运行的Java应用程序,可以通过JMX(Java Management Extensions)或本地进程访问。 2. **获取线程信息**:一旦连接成功,就可以查看所有运行的线程,包括它们...

    Java系列深入解析Java多线程

    - **jstack工具**:用于查看Java应用的线程堆栈信息,帮助分析线程状态和死锁问题。 - **ThreadMXBean**:Java管理扩展(JMX)的一部分,可以获取线程信息,监控线程活动。 Java多线程的掌握需要理论与实践相结合...

    Alibaba Java Diagnostic Tool ArthasAlibaba Java诊断利器Arthas.zip

    4. **线程分析**:通过`thread`命令查看线程状态,找出可能的死锁或阻塞。 ### 注意事项 - 需要在Java应用启动时添加特定的JVM参数,以便Arthas能够正确连接。 - Arthas的使用需要对Java有一定的了解,特别是JVM和...

    java 线程

    - **JMX (Java Management Extensions)**: 可以监控和管理Java应用程序,包括线程的查看和操作。 - **VisualVM**: JDK自带的性能分析工具,可以查看应用的线程状态,分析死锁等问题。 - **Thread Dump**: 当应用...

    visualvm.zip

    2. **线程分析**:通过线程监视器,开发者可以查看每个线程的状态,查找死锁和阻塞问题。 3. **CPU性能分析**:JVisualVM可以显示CPU的使用率,并详细列出各个线程的CPU消耗,有助于找出性能瓶颈。 4. **类和方法...

    jprobe使用帮助文档

    3. **线程调试(Thread Debugging)**:提供线程可视化工具,可以查看线程状态,追踪死锁,理解并发问题。 4. **代码覆盖率(Code Coverage)**:分析代码执行情况,帮助确定哪些代码未被充分测试。 5. **JMX 监控...

    java VisualVM之插件TAD

    Java VisualVM是一款强大的Java应用程序性能分析工具,它包含了许多功能,如内存分析、线程分析、JMX连接、采样器等。而TAD(Thread Analysis and Dump)是VisualVM的一个插件,专为了解析和分析Java应用程序的线程...

    Java多线程与并发库视频资源网盘链接

    2. **线程的启动和执行**:通过调用Thread对象的start()方法启动线程,该方法会自动调用run()方法执行线程的主要任务。需要注意的是,start()方法只能调用一次,多次调用会导致异常。 3. **线程同步**:当多个线程...

    APress-Taming-Java-Threads-Code.rar_taming java threads_threads

    7. **性能调优**:书中将介绍如何通过监控和调整线程参数来提升并发性能,包括Java的JMX、VisualVM等工具的使用。 8. **实战案例**:通过一系列的实际案例,如Web服务器、数据库连接池等,展示如何在实际项目中应用...

    阿里内部资料--Java开发杂项

    - **确定类/资源的装载路径**:通过`Thread.currentThread().getContextClassLoader().getResource("com/kingdee/youshang/Env.class")`来确定类或资源的加载路径,这对于解决`ClassNotFound`或资源找不到的问题非常...

    JVM面试题、多线程面试题

    3. **死锁**:解释死锁的概念,如何避免死锁,以及使用JMX或JConsole检测死锁。 4. **线程池**:ExecutorService、ThreadPoolExecutor和ScheduledThreadPoolExecutor的使用和配置。 5. **并发容器**:比如...

    java性能监视和管理官方指南

    开发者可以通过jstack命令来查看线程的堆栈跟踪,诊断死锁和线程状态问题。 7. **应用程序性能监控(Application Performance Monitoring, APM)**:对于生产环境的监控,可以使用APM工具来监视应用程序的运行状况...

    开发软件调度系统.zip

    4. **死锁预防和检测**:死锁是并发编程中的常见问题,Java没有内置的死锁检测机制,但可以通过避免循环等待条件、设置超时和资源有序分配等策略来预防死锁。 5. **性能监控与调优**:Java提供JMX(Java Management...

    多线程编程

    例如,Java中的`Thread`类和`Runnable`接口,C#中的`Thread`类以及`async/await`关键字,Python中的`threading`模块等。这些语言的线程API允许开发者创建、启动、同步和管理线程。 多线程编程的关键挑战在于线程间...

Global site tag (gtag.js) - Google Analytics