Java线程查看工具——jstack

本文介绍如何利用jstack工具来诊断Java应用程序中导致CPU使用率异常升高的线程问题。通过具体案例展示了如何从众多线程中定位到问题根源,即一个存在死循环的自定义类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jdk1.6退出了一个查看线程CPU使用率的工具——jstack。其可以查看当前web应用中存在的线程,以帮助定位程序中那些线程对CPU的使用率过高。

    其格式为 stack -l PID ,其他可以通过stack -h查看帮助文档。

 

    今天发现项目工程启动后,在未作任何操作的情况下javaw的CPU使用率一直50%,直觉感觉项目工程有问题了。于是用jstack查看当前所有线程,并一一排查可能的java类,发现启动加载的类里有人写死循环了。以下是找到的类:

以上LogQueue就是开发的类。

 

定位时可能麻烦,那么多线程哪个是呢?

一开始我用jconsole观察,虽然也能看到这些线程,但其过滤功能太弱,无法找到公司的类。于是用jstack将结果写入文件,直接查找公司哪些类里的线程在运行。

通常框架里的类不会有问题,查找定位时可先放弃,如图中quartz框架的类,都可直接跳过。

 

另外,我在AIX下的jdk1.6中没找到jstack,不知道什么原因;后来在同事window系统jdk1.6中找到了。

------------------------------------------------------------------

好久没写东西了,今天写点今天的总结,凑篇数。

关于进程&线程查看器 用过vc++自带的Process Viewer,觉得这个小程序简单易用,有时候作用还很大,我就产生了自己做一个类似程序的想法,想着想着就着手作了起来。  首先我查看了有关进程和线程的api函数(在tlhelp32.h中)了解了他们的用法。  具体实施阶段:   界面设计:该实用程序的界面几乎完全参考vc++自带的Process Viewer,以前从未接触过CListView,这回是从头开始作,我参考了"MFC Windows程序设计"里面有详细的关于CListView的介绍和实例,不过有些地方它并未讲清楚,你只能看mfc源代码凭经验猜测某个函数的用法以及某些事件产生的消息,比如当所选Item改变时产生消息LVN_ITEMCHANGED,这个消息使我能在选中某一个Item时能通知线程视图更新。界面设计的另一个问题是分割窗口,这也是我第一次接触CSplitterWnd类,我使用了静态分割创建窗口的方法,以加入两个不同的视图其类分为:CThreadList和CProcessView. 下面简单介绍一下,该程序的功能正如其名,当你启动该程序时,它会检索当前在该系统中的进程和线程,并将进程的基本信息以列表的形式列出来,当你选中某一进程时,程序会在下面的线程视图中列出该进程的所有线程的基本信息。由于刚刚作玩,所以没有进行系统的测试,里面可能有一些bug希望用户发现后能与我联系,谢谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值