1.情景展示

  java虚拟机占用这么高的CPU,肯定不正常!  

2.原因分析

  第一个是tomcat,正在运行java项目;

  第二个是eclipse,因为eclipse的运行依赖于java。

  现在的问题是:tomcat的CPU使用率达到了90%,单独运行tomcat是不可能占用这么多CPU的,所以,问题就出现在:

  java项目的CPU占有问题。

  既然知道项目有问题,那就需要排查项目中具体哪个java类中的哪行代码出了问题。

  将第一个应用程序也就是tomcat关闭后,CPU立马会降下来,这进一步证实了:是项目的问题。

3.解决方案

  工具:Process Explorer

  第一步:查看最占CPU程序所对应的pid

  打开该应用,第二栏就是CPU,默认将程序按照CPU的占有率进行倒序排列,即:最占CPU的程序会排在最前面。

  这个程序也就是tomcat,右侧有个pid列,其对应的值是:12240

  第二步:保存程序的线程信息

  打开DOS命令窗口,在cmd命令窗口中执行命令:jstack 12240 > C:\Users\Marydon\Desktop\problem.log。

  该命令的作用是将PID为12240的程序所包含的所有线程信息,保存在本地C:\Users\Marydon\Desktop\problem.log文件中。

  第三步:查看占用CPU的线程

  Process Explorer中,选中最占用CPU的那个应用(javaw.exe)--》右键Properties--》切换到Threads栏--》默认将线程按CPU进行倒序排列。

  每行都代表一个线程,tid代表的就是该线程所对应的线程id(十进制)。

  第四步:在线程文件中查找该线程id

  根据该tid去log文件中查找,就能找到该线程所对应的java代码。

  由于,刚才导出的log文件中,存储的线程id是16进制的,而我们在Process Explorer中看到的是10进制的tid,所以,我们需要将十进制转换成16进制。

  以tid=12352的线程为例,转换成十六进制后为3040。

  打开刚才的log文件,查找3040(0x3040)

  意思是:WindowsSelectorImpl.java的第296行在使用该线程(也就是占内存的代码所在)

  去javaWeb项目中,打开WindowsSelectorImpl.java文件,跳到第296行,就是问题所在。

  同样的,对其它占用CPU高的线程也按这种方式进行排查即可。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

 

windows 排查javaWeb程序占用CPU过高问题(可追踪到问题代码所在行)的更多相关文章

  1. 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...

  2. Linux排查Java程序占用CPU很高的解决办法

    Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意 ...

  3. Linux排查java程序占用cpu过高的线程代码

    分几步骤: 1.通过top,查出占用CPU过高的java进程 ,比如: pid :6666 2.通过ps -mp 6666 -o THREAD,tid,time| sort -n -k1 -r 查看此 ...

  4. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

  5. Windows服务器java.exe占用CPU过高问题分析及解决

    最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...

  6. 线上Java程序占用 CPU 过高,请说一下排查方法?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  7. windows下揪出java程序占用cpu很高的线程

    背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...

  8. JVM进程占用CPU过高问题排查

    上午收到报警,某台机器上的CPU负载过高,通过逐步的排查,解决了问题,下面记录一下整个排查的过程. 首先,登录上对应的机器,通过top命令找到占用CPU过高的进程ID,也就是PID,为29126, 然 ...

  9. 记一次java程序占用cpu超高排查

    1.首先通过top命令查看占用cpu过高的pid #top top - 18:07:25 up 48 days,  1:07,  3 users,  load average: 11.94, 11.9 ...

随机推荐

  1. 原创的离线版 Redis 教程,给力!

    嗯,你没看错,松哥又给大家送干货来了.这次是可以离线阅读的 PDF 版教程哦. 之前一直有小伙伴问我有没有 Redis 的电子书,老实说,有是有,但是公开给大家分享,其实有一点点风险,毕竟这都是有版权 ...

  2. Kafka学习笔记之Kafka性能测试方法及Benchmark报告

    0x00 概述 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafka的性能,以及如何使用Kafka Manager监控Kafka的工作状态,最后给出了Kafka ...

  3. ADFS登录界面自定义

    最近在做identityServer3+ADFS 实现域账号第三方授权验证,发现一个问题,在我们网站跳转到域账户登录页面,这个页面有点不美观,那么我们改如何自定义这个登录界面呢? ADFS安装配置这里 ...

  4. 大文件SQl脚本怎么还原以及SQlsqlserver怎么全自动备份数据库

    1:导出的SQl脚本文件通常大于100M左右就会还原不了,不是报错就是说系统文件找不到(sql脚本是直接拖进来的,不存在路径的问题). 2:CMD 使用 OSQL命令或者Sqlcmd命令都是可以解决的 ...

  5. C 补充

    a++与++a的区别 #include <stdio.h> void main(){ int a=5,b=5; int i=0; for(i=0;i<2;i++){ printf(& ...

  6. Android App压力测试方法(Monkey)

    一.为什么要开展压力测试 a.提高产品的稳定性:b.提高产品的留存率 二.什么时候开展压力测试 a.首轮功能测试通过后:b.下班后的夜间进行 三.7个基础知识(理论部分) 3.1 手动测试场景与自动测 ...

  7. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  8. 对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成

    VS新增操作数据库出现如下报错. 原因是数据库表未添加主键 MySQL: CREATE TABLE Customer (SID integer, Last_Name ), First_Name ), ...

  9. IDEA使用maven搭建spring项目

    spring框架 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发.从简单 ...

  10. linux驱动学习笔记---实现中断下半部以及驱动编写规范(七)【转】

    转自:https://blog.csdn.net/weixin_42471952/article/details/81609141 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协 ...