【三板斧】Java定位CPU使用高问题

1、TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H"键,记录高消耗线程号,并将改线程号转换为十六进制

2、使用 jstack [pid]  > xx.log 命令打印进程信息,为了定位准确,可以多来几次

3、打开日志文件,找到十六进制的线程信息,可定位到具体类的某一行。

演示:

1、查询消耗CPU高的进程号 PID,并记录下来

#top

top - 18:45:29 up 14 days, 23:27,  6 users,  load average: 3.18, 3.08, 2.64

Tasks: 299 total,   1 running, 297 sleeping,   0 stopped,   1 zombie

Cpu(s): 25.7%us,  1.2%sy,  0.3%ni, 72.6%id,  0.1%wa,  0.1%hi,  0.1%si,  0.0%st

Mem:     23641M total,    23388M used,      252M free,      261M buffers

Swap:    24583M total,        0M used,    24583M free,    12252M cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

16511 icore     20   0 3075m 657m  17m S  201  2.8   2859:27 java

8369 root      20   0  207m 7556 2892 S    3  0.0 798:30.19 runHpiAlarm

22123 load      21   1 92800  19m 8332 S    3  0.1   0:59.40 mdrv

最耗CPU的进程号16511

按下键盘"H"键,记录高消耗线程号,并将改线程号转换为十六进制

top - 18:46:25 up 14 days, 23:28,  6 users,  load average: 3.10, 3.06, 2.66

Tasks: 2722 total,   4 running, 2717 sleeping,   0 stopped,   1 zombie

Cpu(s): 26.0%us,  1.4%sy,  0.4%ni, 71.4%id,  0.8%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:     23641M total,    23395M used,      245M free,      261M buffers

Swap:    24583M total,        0M used,    24583M free,    12256M cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

19691 icore     20   0 3075m 657m  17m R  100  2.8   1419:59 java

19690 icore     20   0 3075m 657m  17m R  100  2.8   1419:58 java

8370 root      20   0  207m 7556 2892 S    2  0.0 497:56.23 runHpiAlarm

8408 root      20   0  207m 7556 2892 S    1  0.0 299:23.67 runHpiAlarm

线程号:19691 、19690 转换为十六进制为:0x4ceb 、0x4cea

2、使用 jstack [pid]  > xx.log 命令打印进程信息

#jstack 16511 > 1.log

#jstack 16511 > 2.log

#jstack 16511 > 3.log

3、打开日志文件,找到两个线程信息,如下

"Thread-77" prio=10 tid=0x00007f58d4041800 nid=0x4ceb runnable [0x00007f58d175f000]
   java.lang.Thread.State: RUNNABLE
 at com.huawei.iiss.upadapter.common.oprindex.thread.OprUserIndexThread.run(OprUserIndexThread.java:61)
 at java.lang.Thread.run(Thread.java:662)

"Thread-76" prio=10
tid=0x00007f58d4a43800 nid=0x4cea
runnable [0x00007f58bd066000]
   java.lang.Thread.State: RUNNABLE
 at com.huawei.iiss.upadapter.common.oprlog.thread.SaveOprLogThread.run(SaveOprLogThread.java:80)
 at java.lang.Thread.run(Thread.java:662)

找到以上红色信息,已经定位到JAVA具体代码,产看代码,发现死循环。。。速度改之

附:TOP命令中需要关注的值:
(1)load average:此值反映了任务队列的平均长度;如果此值超过了CPU数量,则表示当前CPU数量不足以处理任务,负载过高
(2)%us:用户CPU时间百分比;如果此值过高,可能是代码中存在死循环、或是频繁GC等
(3)%sy:系统CPU时间百分比;如果此值过高,可能是系统线程竞争激烈,上下文切换过多,应当减少线程数
(4)%wa:等待输入、输出CPU时间百分比;如果此值过高,说明系统IO速度过慢,CPU大部分时间都在等待IO完成
(5)%hi:硬件中断CPU百分比;当硬件中断发生时,CPU会优先去处理硬件中断;比如,网卡接收数据会产生硬件中断
(6)swap used:被使用的swap;此值过高代表系统因为内存不足在进行频繁的换入、换出操作,这样会影响效率,应增大内存量
(7)%CPU:进程使用CPU的百分比;此值高表示CPU在进行无阻塞运算等

【三板斧】Java定位CPU使用高问题的更多相关文章

  1. Java定位CPU使用高问题--转载

    原文地址:http://www.cnblogs.com/guoyuqiangf8/p/3545687.html 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H&q ...

  2. jstack命令定位java程序CPU利用率高的代码位置

    高手是怎么使用jstack精确找到异常代码的(java程序CPU利用率高的情况) 请jstack神器来帮忙 本文介绍Linux环境下使用jstack定位问题的秘笈1.[top命令]找到CPU利用率持续 ...

  3. Java / JVM CPU 利用率高 - 诊断方法 1 - Thread Dump 结合 OS 诊断

    IBM AIX Java 1. topas 命令定位 CPU 使用高的进程,比如下面 PID 614852 Name            PID  CPU% java         614852  ...

  4. Java进程CPU使用率高排查

    Java进程CPU使用率高排查 生产java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下.1.jps 获取Java进程的PID.2.jstack pid >> ...

  5. 轻松定位CPU飙高问题

    以下四步轻松定位CPU飙高问题: ①top pid 查看cpu耗CPU进程 ②top -Hp pid 查看该进程所有线程的运行情况,找到占用 CPU 过高的线程 pid ③ printf %x pid ...

  6. Java服务CPU占用高问题定位方法

    1. 概述 提供一种简单的方法来定位CPU高的问题. 找到CPU高的进程,比如232543: 执行top -H -p pid,找到占用CPU最高的线程号,比如232544,转换成16进制38c60: ...

  7. java进程CPU飙高

    因为这段时间一直在弄监控,但是工作还是在进行中 因为机器不多,所以今天早上巡检了一下,看到一台生产机器上的CPU飙高 top

  8. (原创)性能测试中,Oracle服务器定位CPU使用率高的瓶颈(SQL)

    本篇博客记录一次性能测试过程中,定位对CPU使用率高的瓶颈问题,主要定位SQL为准 一.用SQL命令定位1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据 ...

  9. java程序——CPU过高100%及内存泄露排查

    CPU过高 这类问题可以使用 top 命令观察一些,CPU 是不是都被 Java 程序占用了.比如下面这个截图: 服务器的 CPU 大多都被 Java 占用了.这正是我们之前生产上 CPU 过高的一个 ...

随机推荐

  1. C++视频课程小结(1)

    C++远征之起航篇 章节介绍: 每章小结: 第一章:C++诞生于贝尔实验室,C++包含C语言. 第二章:介绍了IDE环境(虽然没怎么懂),还推荐使用visual stdio 2010 旗舰版(姑且下了 ...

  2. 第二次作业----自学c++的选择与计划

    1.选择慕课网进行学习的原因 由于本来寒假是打算学习java的(如上篇随笔所言),所以向之前已经自学的同学问如何找教学视频,他就向我推荐了慕课网,在看了几集java的教学视频之后觉得慕课网挺好用的,所 ...

  3. springMVC+JAP整合彻底摆脱persistence.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  4. Head First设计模式-单例模式

    一.整体代码 Singleton.java public class Singleton { private static Singleton uniqueInstance; // other use ...

  5. SNMP MIB中的含read-create节点的表的实现

    做过snmp/mib开发的知道,常见的节点类型一般只有no-accessible,read-only,read-write三种访问类型.snmp V2中引入了一种新的访问类型:read-create. ...

  6. props 和 state的区别

    作者:孙志勇 微博 日期:2016年11月29日 一.时效性 所有信息都具有时效性.文章的价值,往往跟时间有很大关联.特别是技术类文章,请注意本文创建时间,如果本文过于久远,请读者酌情考量,莫要浪费时 ...

  7. Firefox插件一键切换兼容IE

    转载:http://mozilla.com.cn/thread-42137-1-1.html 让火狐兼容IE的双核扩展,一键切换至IE内核,网银支付无忧愁.支持Adblock plus和FireGes ...

  8. VPS之openVPN的安装配置

    原文地址:http://www.blogjava.net/dongbule/archive/2010/11/01/336714.html 上次写的<VPS的购买和使用>中提到了openVP ...

  9. 数据结构之hash表

    哈希表是种数据结构,它可以提供快速的插入操作和查找操作.hash定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值 ...

  10. HTML5 API——无刷新更新地址 history.pushState/replaceState 方法

    尽 管是上面讲到的<JavaScript高级程序设计>(第二版)中提到,BOM中的location.path/query…… (window.location)在通过JavaScript更 ...