- 浏览: 340804 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hanmiao:
如果接口里的方法声明会抛出某些异常,那么在使用lambda 表 ...
Java8中Lambda表达式的10个例子 -
彭成林:
我试了一下,,虽然配置这个插件简单,,但是验证码的效果真是不咋 ...
一个Struts2验证码生成插件JCaptcha4Struts2的使用经历 -
桃汁天天:
非常感谢 为我们剩下了许多研究时间
ExtJs中根据后台数据动态创建表格列及其数据 -
jobar:
mistake 写道var resultSetId = typ ...
ExtJs中根据后台数据动态创建表格列及其数据 -
mistake:
var resultSetId = type === 'con ...
ExtJs中根据后台数据动态创建表格列及其数据
线程转储就是在jvm中所有活动的线程的一个列表,线程转储对于分析应用程序瓶颈和死锁情况非常有帮助。
在java程序中有两种常用的方法可以让我们生成线程转储,这些方法对于linux或者Unix操作系统来说是有效的,window情况稍有不同。
1. VisualVM :
我们可以使用VisualVM很容易的为任何java程序生成线程转储。只需要在运行的java进程上点右键,选择“Thread Dump”选项来生成。
2 jstack:
java提供了自带的工具jstack,通过这个工具我们可以同样为java进程产生线程转储。通过两个步骤实现:
2.1 用“ps -eaf | grep java”命令找到java进程的PID。
2.2 用jstack PID 命令来生成线程转储到控制台,也可以用命令“jstack PID >> mydumps将输出保存到文件中mydumps中。
下面是输出的dump文件
可以从文件中看到线程转储是全部线程的罗列,每项显示了有关线程的信息,包括下面的几项信息:
线程名
线程优先级
线程ID:代表线程的唯一ID号
线程状态:提供了当前线程的状态信息,例如RUNNABLE, WAITING, BLOCKED。当分析线程死锁时查看阻塞的线程的状态跟他们获取锁相关的资源
线程调用堆栈:为线程提供了重要的堆栈信息。这儿我们可以看到线程获取锁以及它等待的锁的情况。
在java程序中有两种常用的方法可以让我们生成线程转储,这些方法对于linux或者Unix操作系统来说是有效的,window情况稍有不同。
1. VisualVM :
我们可以使用VisualVM很容易的为任何java程序生成线程转储。只需要在运行的java进程上点右键,选择“Thread Dump”选项来生成。
2 jstack:
java提供了自带的工具jstack,通过这个工具我们可以同样为java进程产生线程转储。通过两个步骤实现:
2.1 用“ps -eaf | grep java”命令找到java进程的PID。
2.2 用jstack PID 命令来生成线程转储到控制台,也可以用命令“jstack PID >> mydumps将输出保存到文件中mydumps中。
下面是输出的dump文件
可以从文件中看到线程转储是全部线程的罗列,每项显示了有关线程的信息,包括下面的几项信息:
线程名
线程优先级
线程ID:代表线程的唯一ID号
线程状态:提供了当前线程的状态信息,例如RUNNABLE, WAITING, BLOCKED。当分析线程死锁时查看阻塞的线程的状态跟他们获取锁相关的资源
线程调用堆栈:为线程提供了重要的堆栈信息。这儿我们可以看到线程获取锁以及它等待的锁的情况。
2014-02-25 14:23:57 Full thread dump Java HotSpot(TM) Client VM (23.25-b01 mixed mode, sharing): "RMI TCP Connection(6)-141.206.218.103" daemon prio=6 tid=0x03d34400 nid=0xe48 runnable [0x0478f000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:150) at java.net.SocketInputStream.read(SocketInputStream.java:121) at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) at java.io.BufferedInputStream.read(BufferedInputStream.java:254) - locked <0x28f543f8> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(FilterInputStream.java:83) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - <0x28f54580> (a java.util.concurrent.ThreadPoolExecutor$Worker) "RMI TCP Connection(5)-141.206.218.103" daemon prio=6 tid=0x03e40c00 nid=0x1f98 runnable [0x047df000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:150) at java.net.SocketInputStream.read(SocketInputStream.java:121) at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) at java.io.BufferedInputStream.read(BufferedInputStream.java:254) - locked <0x28efb0a0> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(FilterInputStream.java:83) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - <0x28e74b30> (a java.util.concurrent.ThreadPoolExecutor$Worker) "JMX server connection timeout 16" daemon prio=6 tid=0x03e38c00 nid=0x1b84 in Object.wait() [0x043af000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x28e76e38> (a [I) at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168) - locked <0x28e76e38> (a [I) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - None "RMI Scheduler(0)" daemon prio=6 tid=0x03e30000 nid=0x464 waiting on condition [0x046bf000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x28de9928> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - None "RMI TCP Connection(1)-141.206.218.103" daemon prio=6 tid=0x03e28000 nid=0x1e54 in Object.wait() [0x045de000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x28e77088> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer) at com.sun.jmx.remote.internal.ArrayNotificationBuffer.fetchNotifications(ArrayNotificationBuffer.java:449) - locked <0x28e77088> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer) at com.sun.jmx.remote.internal.ArrayNotificationBuffer$ShareBuffer.fetchNotifications(ArrayNotificationBuffer.java:227) at com.sun.jmx.remote.internal.ServerNotifForwarder.fetchNotifs(ServerNotifForwarder.java:275) at javax.management.remote.rmi.RMIConnectionImpl$3.run(RMIConnectionImpl.java:1289) at javax.management.remote.rmi.RMIConnectionImpl$3.run(RMIConnectionImpl.java:1287) at javax.management.remote.rmi.RMIConnectionImpl.fetchNotifications(RMIConnectionImpl.java:1293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) at sun.rmi.transport.Transport$1.run(Transport.java:177) at sun.rmi.transport.Transport$1.run(Transport.java:174) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:173) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - <0x28e77400> (a java.util.concurrent.ThreadPoolExecutor$Worker) "RMI TCP Accept-0" daemon prio=6 tid=0x03e0fc00 nid=0x18e0 runnable [0x0413f000] java.lang.Thread.State: RUNNABLE at java.net.DualStackPlainSocketImpl.accept0(Native Method) at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:198) - locked <0x28de9b50> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:530) at java.net.ServerSocket.accept(ServerSocket.java:498) at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:359) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - None "DestroyJavaVM" prio=6 tid=0x00acb800 nid=0x125c waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "t3" prio=6 tid=0x03cc3800 nid=0x1614 waiting for monitor entry [0x03f3f000] java.lang.Thread.State: BLOCKED (on object monitor) at lock.SyncThread.run(ThreadDeadlock.java:42) - waiting to lock <0x28de9cc8> (a java.lang.Object) - locked <0x28de9cd0> (a java.lang.Object) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - None "t2" prio=6 tid=0x03cc3000 nid=0x1b3c waiting for monitor entry [0x03aaf000] java.lang.Thread.State: BLOCKED (on object monitor) at lock.SyncThread.run(ThreadDeadlock.java:42) - waiting to lock <0x28de9cd0> (a java.lang.Object) - locked <0x28de9d68> (a java.lang.Object) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - None "t1" prio=6 tid=0x00a66400 nid=0x19e0 waiting for monitor entry [0x03f9f000] java.lang.Thread.State: BLOCKED (on object monitor) at lock.SyncThread.run(ThreadDeadlock.java:42) - waiting to lock <0x28de9d68> (a java.lang.Object) - locked <0x28de9cc8> (a java.lang.Object) at java.lang.Thread.run(Thread.java:724) Locked ownable synchronizers: - None "Service Thread" daemon prio=6 tid=0x00a60800 nid=0x118c runnable [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "C1 CompilerThread0" daemon prio=10 tid=0x00a5ec00 nid=0x14bc waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Attach Listener" daemon prio=10 tid=0x00a5a400 nid=0x1e08 waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Signal Dispatcher" daemon prio=10 tid=0x00a7fc00 nid=0x4d4 runnable [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" daemon prio=8 tid=0x00a37800 nid=0x10f4 in Object.wait() [0x03aff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x28dea030> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) - locked <0x28dea030> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189) Locked ownable synchronizers: - None "Reference Handler" daemon prio=10 tid=0x00a32c00 nid=0xeac in Object.wait() [0x03b8f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x28de9918> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) - locked <0x28de9918> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers: - None "VM Thread" prio=10 tid=0x00a31800 nid=0x1474 runnable "VM Periodic Task Thread" prio=10 tid=0x00a61400 nid=0x1844 waiting on condition JNI global references: 181 Found one Java-level deadlock: ============================= "t3": waiting to lock monitor 0x03cc4d2c (object 0x28de9cc8, a java.lang.Object), which is held by "t1" "t1": waiting to lock monitor 0x00a36aac (object 0x28de9d68, a java.lang.Object), which is held by "t2" "t2": waiting to lock monitor 0x00a37744 (object 0x28de9cd0, a java.lang.Object), which is held by "t3" Java stack information for the threads listed above: =================================================== "t3": at lock.SyncThread.run(ThreadDeadlock.java:42) - waiting to lock <0x28de9cc8> (a java.lang.Object) - locked <0x28de9cd0> (a java.lang.Object) at java.lang.Thread.run(Thread.java:724) "t1": at lock.SyncThread.run(ThreadDeadlock.java:42) - waiting to lock <0x28de9d68> (a java.lang.Object) - locked <0x28de9cc8> (a java.lang.Object) at java.lang.Thread.run(Thread.java:724) "t2": at lock.SyncThread.run(ThreadDeadlock.java:42) - waiting to lock <0x28de9cd0> (a java.lang.Object) - locked <0x28de9d68> (a java.lang.Object) at java.lang.Thread.run(Thread.java:724) Found 1 deadlock.
发表评论
-
高性能web网站优化原则14——缓冲Ajax请求
2015-07-07 17:34 546参见:https://developer.yahoo.com/ ... -
高性能web网站优化原则13——配置ETag
2015-07-07 16:28 963什么事ETag HTTP协议规格 ... -
高性能web网站优化原则12——移除重复的脚本
2015-07-06 16:50 631参见:https://developer.yahoo.com/ ... -
高性能web网站优化原则11——避免重定向
2015-07-06 15:31 1524重定向(redirect)将用 ... -
高性能web网站优化原则10——精简JavaScript
2015-07-03 18:05 7311 精简压缩 精简是从代码中移除空格注释等不必要的字符以减少 ... -
高性能web网站优化原则9——减少DNS查找
2015-07-03 16:56 771百度百科对DNS的说明:D ... -
高性能web网站优化原则8——脚本和css放在外部引用,避免内联
2015-06-26 17:40 807将脚本或css放页面里面叫做内联,将脚本放一个单独的文件里,在 ... -
高性能web网站优化原则7——避免css表达式
2015-06-26 10:58 561参考:https://developer.yahoo.com/ ... -
高性能web网站优化原则6——把js脚本放在页面底部
2015-06-25 19:02 754在页面渲染时,js跟css渲染时的顺序恰好相反,浏览器会先下载 ... -
高性能web网站优化原则5——把css放在页面顶部
2015-06-23 18:07 595渐进式渲染 html页面渲染是一个渐进式的过程。当浏览器加载 ... -
高性能web网站优化原则4——利用gzip压缩组件
2015-06-19 15:14 1421从HTTP/1.1开始,web客户 ... -
高性能web网站优化原则3——增加Expires头
2015-06-18 16:15 480Expires头 浏览器使用cache来减少http请求 ... -
高性能web网站优化原则2——适当使用CDN(内容分发网络)
2015-06-18 09:23 746CDN的全称是Content Delivery Network ... -
高性能web网站优化原则1——尽可能的减少http请求
2015-06-17 17:19 1110原文参见:https://developer.yahoo.co ... -
jstat - Java Virtual Machine Statistics Monitoring Tool
2014-04-14 17:09 991From http://docs.oracle.com/jav ... -
了解GC
2014-04-02 14:12 687每个搞java的都可能碰到 ... -
Java中的内存泄漏问题
2014-03-31 16:43 8451 什么是内存泄漏 Java中的内存泄漏指的是:有些对象不 ... -
性能调优利器
2014-03-12 11:06 5541 vmstat iostat netstat (监控工具) ... -
性能调优涉及到的几个指标
2014-03-11 13:55 843构建高性能的应用程序要求: 1 低延迟: 例如页面加载事件要很 ...
相关推荐
java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。...如果记录了类的直方图,它还提供了线程转储中的堆对象的概述。
监视JVM线程并在给定时间内阻塞线程时保存线程转储。 用法 从下载jar 将其添加到要监视的应用程序的命令行中: java -javaagent:jvm-monitoring-agent-0.9.0.jar=threshold=1000,debug ...rest of command 配置...
Java线程转储分析器 这是用Java编写的Java线程转储分析器。 它基于的。 有关用法的其他信息,请参见 。 执照 Java Thread Dump Analyzer是根据。 版权所有2014-2016 Spotify AB 版权所有2016-2018 MP Objects BV...
Java线程转储分析器这是用Java编写的Java线程转储分析器。 执照Java Thread Dump Analyzer是根据,版权属于Spotify AB。本地测试npm installnpm test 使用npm 6.13.7和node v13.8.0测试。去做在“同步器”部分中,使...
该工具允许用户加载,可视化和分析Visual VM生成的Java线程转储。 请参阅Wiki,以获取快速入门指南和教程。
锁定可视化 用于可视化 Java 线程转储的项目。
堆栈生成.NET托管进程线程转储的简单实用程序(类似于Java jstack),即所有托管线程的当前stacktrace。 基于可从获得的Managed Stack Explorer中的代码。 要运行它,请使用nstack.exe <PID> 。 它将所有托管线程的...
JVM @ JDay Lviv上的线程转储目录演示期间使用的命令书目/链接 承诺您如何获得一个线程转储? 打印线程? 什么是安全点,为什么要当心? 哪些工具可以提供帮助?如何提供帮助? 当你有了线程转储时...里面有什么? ...
Java VisualVM是一个多线程的监控分析工具,VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。功能包括内存分析、快照功能、转储功能...
Java线程堆栈是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某 个时刻所有线程的运行状态,包括每一个线程的调用堆栈, 锁的持有情况等信息。 每一种Java虚 拟机(SUN JVM、 IBM JVM、 JRokit、 GNU JVM等等)...
此应用程序旨在添加到 java-buildpack 分支,以便诊断应用程序部署在与实际应用程序相同的 Tomcat 容器中。 您不必修改您的应用程序即可使用它。 还有一个单独的基于 shell 脚本的解决方案,用于。 需要关注的 ...
Java线程转储分析: 《Analyzing Java Thread Dumps.pdf》 《Java Thread Dumps 分析.pdf》
通过线程转储信息来分析死锁 其他活跃性危险 饥饿 要避免使用线程优先级,因为这会增加平台依赖性,并可能导致活跃性问题。在大多数并发应用程序中,都可以使用默认的线程优先级。 糟糕的响应性...
本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则...
Kubectl Java插件 目录关于该项目使用k8s开发Java应用程序时,kubectl Java插件将使您的生活更轻松: 查找运行Java应用程序的Pod jvm线程转储(:man_technologist_light_skin_tone:现在可以工作) 导出jvm调试端口并...
线程解释,线程状态是什么以及如何分析线程转储。 - 通过分步指南及其背后的原因解决真正复杂的问题。 Maven - Maven 配置文件 调试 - 类加载器、JVM 字节码内部结构 缓存 - JCache API Refcard 和通用术语解释 字节...
在基于POSIX的系统(例如Linux)上请求线程转储的最简单方法是发送kill -3信号,该信号无损地暂停JVM,创建线程转储,然后JVM继续(暂停通常为几百毫秒最多)。例如(用Java进程的进程ID替换$ {PID}):
如你看到的... 我们在用什么? jps-显示Java进程的PID ...kill -3 <PID>-将线程转储到Java进程标准输出 jstack <PID>-将线程转储到stdout jvisualvm-一切;) top -Hp-进程线程对CPU使用率的细分
/ 327 12.3.5 原子性、可见性与有序性 / 328 12.3.6 先行发生原则 / 330 12.4 Java与线程 / 333 12.4.1 线程的实现 / 333 12.4.2 Java线程调度 / 337 12.4.3 状态转换 / 339 12.5 本章小结 / 341 第13章 ...
- 丰富的性能分析功能:JProfiler 提供了丰富的性能分析功能,包括堆转储、线程分析、GC 监控、CPU 监控等。 - 可扩展性:JProfiler 可以与各种 Java 框架集成,例如 Spring、Hibernate、MyBatis 等。 总之,...