对于生产环境的性能问题调试与故障排除而言,线程转储文件是非常重要的工件。线程转储文件往往会有几百行代码(有时会有几千行)。由于其十分冗长,所以我们很难了解其中的所有信息。那么,如果线程转储文件中存储的信息能够以一个紧凑的火焰图来得到展示,这将使我们的分析工作更加轻松。
Continue reading “Java 线程转储文件火焰图“如何获取线程转储文件?- 8 大选项
线程转储是 CPU 占用激增、死锁、响应时间缓慢、内存问题、应用程序无响应及其他系统问题诊断过程中的重要工件。目前市面上有许多不错的在线线程转储分析工具(如:http://fastthread.io/),可帮助您分析和发现问题。但在使用这些工具时,您需要正确提供合适的线程转储文件,以作为其输入。因此,本文中将为您介绍 8 种不同的线程转储文件捕获选项。
Continue reading “如何获取线程转储文件?- 8 大选项“强大的故障排除功能:top -H 与线程转储文件的“婚姻”
我和经理说过,我喜欢现在的标题。他告诉我说,这很正常,毕竟我还是个单身汉。所以“婚姻”这个词终归还是能入我眼的。但是他已经结婚 16 年了,所以他眼中的“婚姻”可能会和我眼中的有所不同 :-)。所以,我可以说是“半心半意”地选择了这个标题,并继续写下了后面的内容。
Continue reading “强大的故障排除功能:top -H 与线程转储文件的“婚姻”“搜索线程转储文件

当线程转储文件中包含了数百个甚至是数千个线程时,用户可能会需要根据线程名称、线程 ID、栈追踪信息等内容来对线程进行搜索…下面就是一些相关情形:
Continue reading “搜索线程转储文件“如何使用火焰图?
线程转储文件往往会有几百行代码(有时会有几千行)。由于其十分冗长,所以我们很难了解其中的所有信息。由 fastThread 工具生成的火焰图能够将这些信息压缩成一个紧凑的图表格式。其能帮助您快速识别热门代码路径(hot code path)。在本文中,我们将了解如何使用 fastThread 工具生成火焰图,从而有效进行调试和故障排除工作。
Continue reading “如何使用火焰图?”死锁
描述
维基百科恰当地给出了“死锁”的定义:当两个以上的运算单元,双方都在等待对方停止执行,以获取系统资源,但是没有一方提前退出时,就称为死锁。JVM 中发生死锁之后,恢复的唯一方法是重新启动 JVM。
Continue reading “死锁”StackOverFlowError:起因与解决方案
StackOverFlowError 是最为常见的 JVM 错误之一。在本博文中,我们将了解线程栈的内部机制、触发 StackOverFlowError 的可能原因以及解决此类错误的潜在解决方案。
为了更加深入地了解 StackOverFlowError,下面就让我们来看看这一个简单程序:
Continue reading “StackOverFlowError:起因与解决方案”循环死锁
描述
哲学家聚餐问题是并发编程中的经典计算机科学问题。哲学家聚餐问题将导致循环死锁问题。循环死锁是死锁问题的一种变体。发生死锁之后,恢复的唯一方法是重新启动 JVM。
Continue reading “循环死锁”线程转储文件分析模式 – 条条大路通罗马
描述
如果线程转储文件中的多个线程最终都调用了同一个方法,那么这可能需要引起您的关注。在存在问题的大多数情况下(比如:数据源响应迟缓、锁未释放、无限循环线程等等),会出现大量线程调用同一个方法的情况。我们需要对这个方法进行详细的分析。
Continue reading “线程转储文件分析模式 – 条条大路通罗马”线程转储文件分析模式 – 多清道夫
描述
不同 GC 算法类型(Serial、Parallel、G1、CMS)将创建数量不同的默认垃圾回收线程。有关创建的默认线程数详情如下所述。有时,系统会根据默认配置创建过多无用的 GC 线程。我们曾经见过基于默认配置创建 128、256、512 个 GC 线程的情况。太多的 GC 线程也会影响应用程序性能。所以我们应该谨慎配置 GC 线程数量。
Continue reading “线程转储文件分析模式 – 多清道夫”