如何定位java程序中占用cpu最高的线程堆栈信息 - 网站

如何定位java程序中占用cpu最高的线程堆栈信息

分类:Java · 发布时间:2023-05-22 16:08 · 阅读:9408

这篇文章主要介绍了如何定位java程序中占用cpu最高的线程堆栈信息方法的相关资料,需要的朋友可以参考下

找出占用cpu最高的线程堆栈信息

在java编码中,有时会因为粗心导致cpu占用较高的情况,为了避免影响程序的正常运行,需要找到问题并解决。这里模拟一个cpu占用较高的场景,并尝试定位到代码行。

示例代码如下:

public class Math { public static final int initData = 666; public static User user = new User(); public int compute() {  //一个方法对应一块栈帧内存区域 int a = 1; int b = 2; int c = (a + b) * 10; return c; } public static void main(String[] args) { Math math = new Math(); while (true){ math.compute(); } } } 

1,使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如18963

2,按H,获取每个线程的内存情况

3,找到内存和cpu占用最高的线程tid,比如18964

4,转为十六进制得到 0x4a14,此为线程id的十六进制表示

5,执行 jstack 18963|grep -A 10 4a14,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法

6,查看对应的堆栈信息找出可能存在问题的代码

如上图,定位到第15行代码,是由于while循环导致的。

到此这篇关于如何定位java程序中占用cpu最高的线程堆栈信息的文章就介绍到这了,更多相关定位java程序中占用cpu最高的线程堆栈信息内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

标签:
java cpu占用高

相关文章

Java lombok中@Accessors注解三个属性的作用

这篇文章主要介绍了Java lombok的@Accessors注解属性解析,该注解主要作用是:当属性字段在生成 getter 和 setter 方法时,做一些相关的设置,需要的朋友可以参考下

java项目实现统一打印入参出参等日志

这篇文章主要介绍了java项目实现统一打印入参出参等日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

基于jdk动态代理和cglib动态代理实现及区别说明

这篇文章主要介绍了基于jdk动态代理和cglib动态代理实现及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java如何获得redis所有的key-value

这篇文章主要介绍了java如何获得redis所有的key-value,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis中的动态sql问题

这篇文章主要介绍了mybatis中的动态sql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回分类 返回首页