Java定位CPU使用高问题--转载
原文地址:http://www.cnblogs.com/guoyuqiangf8/p/3545687.html
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使用高问题
[三板斧]Java定位CPU使用高问题 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H"键,记录高消耗线程号,并将改线程号转换为十六进制 2.使用 js ...
- 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 过高的一个 ...
随机推荐
- LeakCanary 中文使用说明
http://www.liaohuqiu.net/cn/posts/leak-canary-read-me/ LeakCanary 中文使用说明 分享到:新浪微博微信 10 May 2015 Leak ...
- 数据导入读取read.table函数详解,如何读取不规则的数据(fill=T)
函数 read.table 是读取矩形格子状数据最为便利的方式.因为实际可能遇到的情况比较多,所以预设了一些函数.这些函数调用了 read.table 但改变了它的一些默认参数. 注意,read.ta ...
- Windows 10开启默认网络驱动器访问
在Windows 10的系统策略中,驱动器盘符的网络访问是默认关闭的,用管理员权限打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...
- ip校验方法:判断ip是否位于指定的范围内
import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.reg ...
- 解决企业In-House安装APP需HTTPS支持的问题(转载)
同事写的一篇文章,感觉不错,转过来. 解决企业In-House安装APP需HTTPS支持的问题 问题背景: 能否通过应用服务器发布企业应用: 解决iOS7.1后,发布地址必须为HTTPS服务器. 写作 ...
- EF: Returns multi table from procedure
原文:https://msdn.microsoft.com/en-us/data/jj691402.aspx
- 移植UE4的Spline与SplineMesh组件到Unity5
一个月前,想开始看下UE4的源码,刚开始以为有Ogre1.9与Ogre2.1源码的基础 ,应该还容易理解,把源码下起后,发现我还是想的太简单了,UE4的代码量对比Ogre应该多了一个量级,毕竟Ogre ...
- sql 查询 – left join on
1. 问题引入 主要是为了查询在一个表中出现,而不在另一个表中出现的数据,具体来说: 如下图所示, 有A.B两个表,其中B表的Aid字段参照A表的主键id,为了查询在A表中出现,却没有被B表引 ...
- mysql日志问题定位实用命令
show engine innodb status查看日志 select @@version;查看版本(不同版本性能优化不同) SELECT * FROM information_schema.inn ...
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
原文 http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Une ...