`

找到最耗CPU的java线程

    博客分类:
  • jvm
 
阅读更多

 

 

找到最耗CPU的java线程

1 找出占用cpu过高的进程ID号

   命令: top -c
  
 

 

 

 2 找出该进程下,运行时间过长的进程 id号.

     命令:ps -mp 10024 -o THREAD,tid,time | sort -rn


 
 

 

 3 因为在java堆栈日志中,线程id以 16 进程存储,因此我们需要先把 10 进制的线程id,转为 16 进制.

   命令:printf "%x\n" 11490
 
 

 

4 通过 jdk自带的jstack工具,打印堆栈异常信息.

   通过 printf "%x\n" 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应最耗CPU的代码快在哪。

   命令:sudo ./jstack 10024|grep 2ce2 -A 30
 
 

 

Java代码  收藏代码
  1. "DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]  

nid : 对应的linux操作系统下的tid,就是前面转化的16进制数字

tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下

 

脚本化(dumpmes.sh):

#!/bin/sh

topthread=`top -bn1 -p $1 -H|awk 'NR==8{print $1}'`
echo $topthread
topthread=`printf "%x\n" $topthread`
echo $topthread

/usr/local/jdk1.6.0_31/bin/jstack $1|grep $topthread -A 30

 

 

使用demo:(其中10024为主进程号)

[user@is13084905-0328 data]$dumpmes.sh 10024

 

 

 

 

  • 大小: 92.6 KB
  • 大小: 30.8 KB
  • 大小: 5.7 KB
  • 大小: 132.8 KB
分享到:
评论

相关推荐

    Java线程CPU占用高原因排查方法

    Java线程CPU占用高原因排查方法,Java线程CPU占用高原因排查方法

    如何找到占用cpu最高的java线程

    服务端开发者必备技能、面试必问技巧,下载者也可以延伸为如何找到占用内存最大的线程

    Java线程详解.ppt

    3、进程切换,它需要保留当前进程的CPU环境和设置新选中进程的CPU环境。 为此需要花费不少处理时间。正因为进程拥有资源,所以在并发执行进程的时候, 在创建、撤销和切换,系统需要付出较大的开销,因此,系统中...

    Java多线程编程指南

    Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 ...

    java多线程作业.docx

    Java语言的一大特性点就是内置对多线程的支持。多线程是指一个应用程 序中同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编 ...这些线程将被轮流执行,使得每个线程都有机会使用CPU资源。

    Java线程总结教程

    在论坛上面常常看到初学者对线程的无可奈何,所以总结出了下面一篇文章,希望对一些正在学习使用java线程的初学者有所帮助。 首先要理解线程首先需要了解一些基本的东西,我们现在所使用的大多数操作系统都属于多...

    Java多线程之基础篇(一).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    让双核cpu利用率100%的代码

    让双核cpu利用率100%的代码,增加多线程就可以,如果想要内存满了,就不断开辟内存,仅仅是eclipse内存。 资源利用率 java 100% cpu 死机 资源利用率 java 100% cpu 死机 资源利用率 java 100% cpu 死机 资源利用率 ...

    threadBandCpu:将java线程绑定到具体的cpu上执行

    threadBandCpu将java线程绑定到具体的cpu上执行环境:Ubuntu 12.04具体介绍请移步这里:如何使用?调用ThreadBandCpu.bandCpu并实现Runnable的run方法,第二个参数的意思是在第几个cpu上执行假如有4个cpu,那么就是 ...

    Java 线程状态、线程池

    线程已经在JVM中运行,但是是否运行不确定,看当前线程是否由CPU执行权 BLOCKED(锁阻塞) 同步代码需要获取对应的锁对象,如果锁对象被其他线程持有,则当前线程就会进入一个block状态,当当前线程持有锁对象时,...

    java多线程

    要求线程“运货司机”占有CPU资源之后联合线程“装运工”,也就是让“运货司机”一直等到“装运工”完成工作才能开车。 线程“装运工”占有CPU资源之后联合线程“仓库管理员”,也就是让“装运工”一直等到“仓库...

    java多线程下载课程设计工程源码

    网上找了份资料,是别人完成的Java实现多线程下载的功能。Java多线程的好处挺多的,可以充分利用CPU的资源,简化编程模型,简化异步事件的处理,使GUI更有效率,节约成本...

    Java线程的6种状态及切换(透彻讲解).docx

    2. 运行(RUNNABLE) :Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被...

    java多线程安全性基础介绍.pptx

    java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...

    java学习多线程处理

    部分内容如下所示: 进程:应用程序的执行实例 进程的特征:动态性,并发性,独立性 线程:进程内部的一个执行...系统中进程包含多个线程,CPU通过分配时间片的方式管理线程,由这个新的线程来执行线程对象的run方法

    java多线程与并发库高级处理.txt

    如果对什么是线程、什么...说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。

    CPU压测JAR包,可以将多核CPU资源吃满

    java -jar xxx.jar调用 输入线程数,回车【想压满的话,输入CPU线程数】,开始压测 按S退出

    java查询cpu内存工具

    #通过任务管理器查询pid #打印指定pid堆栈日志到指定文件 ...#在ProcessExplorer上查看进程cpu和内存使用情况,找到java进程点开可以看tid线程使用情况,通过tid可在线程日志中找到指定线程进行分析

    java获取cpu、内存信息

    利用 java 获取电脑的cpu信息、内存信息

    2020最新Java面试题及答案(带完整目录).pdf

    Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原生线程随之被回收。操作...

Global site tag (gtag.js) - Google Analytics