- 通过top -H –p pid找到pid进程中占用cpu多的线程tid
- 使用jstack 命令dump线程信息,以便根据TID寻找到具体的线程栈信息
- 线程dump文件里的nid与通过top命令抓取到的tid相对应,只不过nid是十六进制表示,需要进行转换。
如何精确判断一个java线程是否能占用cpu时间?
gogo111007
2015-09-30
例如一个在等待io的java线程(select,poll,...),状态仍然是RUNNABLE,但其实是阻塞的。
如何才能过滤出那些真正会被cpu调度的线程? 我目前是通过比较调用栈上的类名和方法名,来过滤掉那些通常情况的伪运行的线程,但是这种做法明显很蛋疼,也不可能过滤的全。 |
|
claude728
2015-10-02
java有个命令叫jstack,你可以试试!
|
|
cywhoyi
2015-10-03
1.先查看系统cpu调度sys
2.通过CPU memory较高的 3.JPS、JSTACK 基本步骤都这么过来的,如果想要通过界面可能通过jvisualvm等,不过推荐下点评网的开源通过mxbean的实现的调度品改https://github.com/dianping/cat |
|
backkom1982
2015-10-07
|
|
vlinux
2015-10-07
你永远也做不到最精确的,perf也做不到。你能做到的只能是近似精确。
推荐一个国人开发的工具 https://github.com/coderplay/perfj |
|
gogo111007
2015-10-08
额,没说清楚。
我是指如何用程序代码判断,不是人判断,也不是开剖分工具看。 我这边线上的系统没法附工具进去(附一次崩一次),我自己写了个远程调用,打印所有线程的调用栈,但是有很多,看得我眼花,所以想先代码过滤一下,把那些没在跑的线程滤掉,现在是用状态在过滤,但是过滤不完整。 |
|
liuwenjie517333
2015-10-09
没懂楼主的,“那些真正会被cpu调度的线程”,就拿楼主说的“例如一个在等待io的java线程(select,poll,...),状态仍然是RUNNABLE,但其实是阻塞的”。这个线程后续会被CPU调度,算是真正会被cpu调度吗?如果不是,个人大胆猜测楼主指的是当前时间正在被cpu执行的线程,如果是这样,那在某一确定的时刻,比如1个cpu的机器上,某一个具体的时间,cpu只能执行1个线程。
|
|
gogo111007
2015-10-14
liuwenjie517333 写道 没懂楼主的,“那些真正会被cpu调度的线程”,就拿楼主说的“例如一个在等待io的java线程(select,poll,...),状态仍然是RUNNABLE,但其实是阻塞的”。这个线程后续会被CPU调度,算是真正会被cpu调度吗?如果不是,个人大胆猜测楼主指的是当前时间正在被cpu执行的线程,如果是这样,那在某一确定的时刻,比如1个cpu的机器上,某一个具体的时间,cpu只能执行1个线程。
在io中的线程,io完成前一直都不会被调度的,像等select的线程,对端一直不发数据就一直不被cpu调度,而不是所谓的“虽然当前没有被调度,但是可能会被调度的线程”。 我在找cpu负担的时候,像这样在等数据,等监听客户端的线程,自然应该排除出去。 |
|
liuwenjie517333
2015-10-16
恩,想到一个比较笨的方法。在一定时间内,找到正在运行的线程,然后在对应线程执行的业务里加加日志,看是否有执行日志。希望能对楼主有用
|
相关讨论
相关资源推荐
- java游戏占用线程高,java线程运行诊断:揪出占用cpu高的线程,定位问题代码---get新技能...
- java面试(多线程)
- linux和windows系统服务器CPU占用过高,服务启动后CPU占用过高如何分析问题找到占用CPU资源的java进程精确到某个线程,如何使用top命令
- linux排查程序占用cpu过高,Linux排查java程序占用cpu过高的线程代码
- Java多线程知识点,看这一篇就够了!(超详细)
- 1、【java线程及线程池系列】java线程及线程池概念详解
- java创建多个线程 延时1秒_Java 多线程(三)优化任务执行
- java面试题: 生产环境CPU 占用过高,? 如何分析 定位问题,聊聊
- jstack排查java进程占用cpu过高示例
- Arthas (Java内存、线程、CPU性能诊断工具)快速入门