【三板斧】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 过高的一个 ...
随机推荐
- UVa 1312 Cricket Field (枚举+离散化)
题意:在w*h的图上有n个点,要求找出一个正方形面积最大,且没有点落在该正方形内部. 析:枚举所有的y坐标,去查找最大矩形,不断更新. 代码如下: #include <cstdio> #i ...
- Lotus 迁移到Exchange POC 之 新建2007 服务器!
我们登录到Exchange 2007 服务器,由于需要对AD进行扩展,我们首先必须完成架构扩展,由于默认没有ldifde工具,所以我们需要执行servermanagercmd –I rsat-adds ...
- sql语句增删改查(转)
一.增:有4种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例 ...
- spring html特殊字符操作
import org.springframework.web.util.HtmlUtils; /** * html特殊字符操作 * @param answer 操作default=转换为H ...
- 【待补】java开发Web Service
Java中WebService实例 http://blog.csdn.net/kardelpeng/article/details/6321019 java 调用webservice的各种方法总结 h ...
- IntegrityError错误
Python插入数据库提交失败,一直走IntegrityError错误,没打印错误信息(一定注意编码规范,记住打印错误信息),以为插不进去,弄了好久,最后打印了错误信息 (sqlite3.Integr ...
- POJ2503——Babelfish
Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...
- git/github 使用
原文:http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.html git/github学习笔记 Posted on 2011-08-25 2 ...
- WebService《JavaEE6权威指南 基础篇第4版》
[Web服务] 为运行在不同平台和框架之上的软件提供了互操作的标准方式.良好的互操作性和可扩展性.消息采用自包含文档的形式. ——解决异构系统之间交互.解决异构系统通信问题: 1.通过XML,JSO ...
- (剑指Offer)面试题23:从上到下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 很明显,这是一个广度优先遍历. 需要一个队列容器来保存结点,具体操作: 1.将根结点压入队列中,并打印根结点:如果根结点有子结点 ...