电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

【线程分析】WINDOWS下分析JAVA进程中非常耗用CPU资源的代码-NC技术顾问资料.pdf

【线程分析】WINDOWS下分析JAVA进程中非常耗用CPU资源的代码-NC技术顾问资料.pdf_第1页
1/6
WINDOWS下分析JAVA进程中非常耗用CPU资源的代码1.【内容说明】本文主要介绍怎么在WIN系统下,分析占用CPU较高的JAVA进程,定位到代码。2.【问题现象】WIN系统,任务管理器中监控到java进程耗用CPU时间太长,如图所示:进程号为:1153043.【分析思路】用pslist工具看一下进程下的线程信息:(附pslist工具,绿色直接运行:),也可以用ProcessExplorer工具查询线程ID。在所有线程中,有一个线程处于“运行状态”,且执行了3分多种,如下:线程ID为75004(这里是十进制),转换成十六进程值为:124FC,124FC即为线程ID。所有内存值单位均为KB.•Pri:Priority•Thd:NumberofThreads•Hnd:NumberofHandles•VM:VirtualMemory•WS:WorkingSet•Priv:PrivateVirtualMemory•PrivPk:PrivateVirtualMemoryPeak•Faults:PageFaults•NonP:Non-PagedPool•Page:PagedPool•Cswtch:ContextSwitches接下来根据124FC线程ID定位到线程堆栈:运行命令:jstack115304>D:\AnalyseThread.log,把当前所有线程堆栈输出到存储:打开存储文件,检索线程ID=124FC的堆栈:根据线程堆栈定位到代码:问题原因:在主函数中调用了一个compute函数,函数参数如果为true,则会陷入死循环(模拟业务耗时操作)。解决方案:调整逻辑,解除死循环。4.【扩展】以上是在windows下从发现进程到分析到jvm线程代码的过程。我在写这个示例程序的过程中,在程序运行的状态下,我做了一个dump,生成了一个dump文件:javaw.DMP。用windbg分析当前dmp文件,简要分析如下。查看当前java进程所有线程,发现线程号为1的线程ID为124fc(前面定位到的耗时的线程号):切换到线程号为1的线程:查看当前线程堆栈:说明:以上堆栈是nativecode的堆栈,我在代码中调用了IO输出流系统方法,这时是以native代码(非JVM之上的java堆栈)的显示方式,如果看懂可能需要更多的知识,要对windowsnativecode熟悉才可以,建议用前面第3小节讲的方法。补充一下运行原理:1.不管是JVM还是.netframework,我们可以理解为它是操作系统的适配器,只是.netframework只适配windows,而JVM可以适配windows也可以适配linux;2.用C#或JAVA写的代码只是我们便于理解,windows或linux操作系统不认识,它们只认识机器码,这就需要.netframework和JVM框架来把我们写的代码转换成操作系统能够识别的机器码。

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

【线程分析】WINDOWS下分析JAVA进程中非常耗用CPU资源的代码-NC技术顾问资料.pdf

您可能关注的文档

管理软件+ 关注
实名认证
内容提供者

管理软件资料分享

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信