【三板斧】Java定位CPU使用高问题
【三板斧】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使用高问题的更多相关文章
- Java定位CPU使用高问题--转载
原文地址:http://www.cnblogs.com/guoyuqiangf8/p/3545687.html 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H&q ...
- jstack命令定位java程序CPU利用率高的代码位置
高手是怎么使用jstack精确找到异常代码的(java程序CPU利用率高的情况) 请jstack神器来帮忙 本文介绍Linux环境下使用jstack定位问题的秘笈1.[top命令]找到CPU利用率持续 ...
- Java / JVM CPU 利用率高 - 诊断方法 1 - Thread Dump 结合 OS 诊断
IBM AIX Java 1. topas 命令定位 CPU 使用高的进程,比如下面 PID 614852 Name PID CPU% java 614852 ...
- Java进程CPU使用率高排查
Java进程CPU使用率高排查 生产java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下.1.jps 获取Java进程的PID.2.jstack pid >> ...
- 轻松定位CPU飙高问题
以下四步轻松定位CPU飙高问题: ①top pid 查看cpu耗CPU进程 ②top -Hp pid 查看该进程所有线程的运行情况,找到占用 CPU 过高的线程 pid ③ printf %x pid ...
- Java服务CPU占用高问题定位方法
1. 概述 提供一种简单的方法来定位CPU高的问题. 找到CPU高的进程,比如232543: 执行top -H -p pid,找到占用CPU最高的线程号,比如232544,转换成16进制38c60: ...
- java进程CPU飙高
因为这段时间一直在弄监控,但是工作还是在进行中 因为机器不多,所以今天早上巡检了一下,看到一台生产机器上的CPU飙高 top
- (原创)性能测试中,Oracle服务器定位CPU使用率高的瓶颈(SQL)
本篇博客记录一次性能测试过程中,定位对CPU使用率高的瓶颈问题,主要定位SQL为准 一.用SQL命令定位1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据 ...
- java程序——CPU过高100%及内存泄露排查
CPU过高 这类问题可以使用 top 命令观察一些,CPU 是不是都被 Java 程序占用了.比如下面这个截图: 服务器的 CPU 大多都被 Java 占用了.这正是我们之前生产上 CPU 过高的一个 ...
随机推荐
- 一个人写的操作系统 - Sparrow OS
一个人写的操作系统 - Sparrow OS 自己写一个操作系统,这是在过去的几年里我一直为之努力的目标,现在终于完成了. 缘起 自己动手写操作系统的动机最初来自于学习Linux遇到的困难. 我是一个 ...
- JQuery 的bind和unbind函数
测试:页面代码:<body> <input type="button" name="aaa" value="点击我" ...
- 在Windows2012下安装SQL Server 2005无法启动服务的解决办法
下面是我亲自经历过的总结. 因为尝鲜安装了Windows2012,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装.找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的 ...
- OC:习题来自平时搜索
== 第一部分 == 类变量的@protected ,@private,@public,@package,声明各有什么含义?写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?面向对象的三大特征 ...
- 【ToolGood.Words】之【StringSearch】字符串搜索——基于BFS算法
字符串搜索中,BFS算法很巧妙,个人认为BFS算法效率是最高的. [StringSearch]就是根据BFS算法并优化. 使用方法: string s = "中国|国人|zg人|fuck|a ...
- Delphi Data Types
http://docwiki.embarcadero.com/RADStudio/XE6/en/Delphi_Data_Types Integer Data Types Type Descriptio ...
- App Submission Issues
查看原文: http://leancodingnow.com/app-submission-issues/ I bet many iOS developers are busy submitting ...
- 将Excel另存为CSV格式文件
直接将Excel另存为CSV,速度很快: $CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand ...
- MySQL中MySQL X.X Command Line Client一闪而过的问题
问题介绍:我安装完MySQL(我安装的是5.5)后,使用MySQL 5.5 Command Line Client,每次点击,总是一闪而过.解决方法如下: 首先进入cmd 切入MySQL的安 ...
- C++ 初始化与赋值
1.初始化与赋值的区别: 二者的区别不是看,是否有=这个赋值操作符,而是看操作的时候,对象是否已经有值. 初始化:创建对象,并给它设置初始值. 赋值:对象已经有值,擦除对象的当前值,并使用新值代替. ...