我正在阅读关于Thread Dumps
的概念,并找到了各种方法来获取线程转储,但没有文章提到应该采取转储的基础/问题/原因。我们在针对JVM的特定服务器上执行负载测试,并在我们观察到高CPU利用率或占用线程时采用线程转储。它是否正确 ?有人可以说明正常进行螺纹转储或在任何负载测试期间的原因。
我们使用jstack
命令捕获转储:
/app/jdk/jdk1.7.0_111/bin/jstack -l <ProcessID> > <PathToSaveTheFile>
TIA。
线程转储用于事后调试。国际海事组织,你所做的是对的。我没有看到在正常情况下进行转储的原因。
只要你认为可以分析任何与线程锁争用,死锁检测,系统资源争用,...有关的事情,你就可以进行线程转储。
这就是为什么只要我们认为合适就有工具来促进线程转储,而不仅仅是在JVM崩溃之后。随着时间的推移分析多个转储比上一次崩溃转储更全面。
这意味着您可以执行侵入性较小的线程调试,而无需附加分析器,这在大多数情况下会降低应用程序执行的速度(并可能会改变某些动态属性)。