Java定位CPU使用高问题
来源:互联网 发布:淘宝轰炸机 编辑:程序博客网 时间:2024/05/19 03:22
1 Java定位CPU使用高问题
1、TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘”H”键,记录高消耗线程号,并将改线程号转换为十六进制
2、使用 jstack [pid] > xx.log 命令打印进程信息,为了定位准确,可以多来几次
3、打开日志文件,找到十六进制的线程信息,可定位到具体类的某一行。
2 演示:
2.1 查询消耗CPU高的进程号 PID,并记录下来
#top
top - 18:45:29 up 14 days, 23:27, 6 users, load average: 3.18, 3.08, 2.64Tasks: 299 total, 1 running, 297 sleeping, 0 stopped, 1 zombieCpu(s): 25.7%us, 1.2%sy, 0.3%ni, 72.6%id, 0.1%wa, 0.1%hi, 0.1%si, 0.0%stMem: 23641M total, 23388M used, 252M free, 261M buffersSwap: 24583M total, 0M used, 24583M free, 12252M cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND16511 icore 20 0 3075m 657m 17m S 201 2.8 2859:27 java8369 root 20 0 207m 7556 2892 S 3 0.0 798:30.19 runHpiAlarm22123 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.66Tasks: 2722 total, 4 running, 2717 sleeping, 0 stopped, 1 zombieCpu(s): 26.0%us, 1.4%sy, 0.4%ni, 71.4%id, 0.8%wa, 0.0%hi, 0.0%si, 0.0%stMem: 23641M total, 23395M used, 245M free, 261M buffersSwap: 24583M total, 0M used, 24583M free, 12256M cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND19691 icore 20 0 3075m 657m 17m R 100 2.8 1419:59 java19690 icore 20 0 3075m 657m 17m R 100 2.8 1419:58 java8370 root 20 0 207m 7556 2892 S 2 0.0 497:56.23 runHpiAlarm8408 root 20 0 207m 7556 2892 S 1 0.0 299:23.67 runHpiAlarm
线程号:19691 、19690 转换为十六进制为:0x4ceb 、0x4cea
2.2 使用 jstack [pid] > xx.log
命令打印进程信息
#jstack 16511 > 1.log#jstack 16511 > 2.log#jstack 16511 > 3.log
2.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在进行无阻塞运算等
阅读全文
0 0
- Java定位CPU使用高问题
- Java定位CPU使用高问题
- Java定位CPU使用高问题 ——转载
- CPU占用率高问题定位
- Linux下java进程CPU占用率高如何定位问题
- Linux下java进程CPU占用率高如何定位问题
- Linux下java进程CPU占用率高如何定位问题
- Java如何定位占用CPU比较高的问题
- 怎样定位CPU占用率高的问题
- 定位CPU高消耗的问题
- CPU使用高问题分析
- java cpu高 问题诊断
- Linux 下分析Java程序CPU使用高的问题
- 定位高cpu使用率
- Mysql数据库服务器CPU冲高问题定位及分析
- linux下进程CPU占用率高问题定位
- 一个Tomcat高CPU占用问题的定位
- liunx下cpu占用率高如何定位代码问题
- css继承和非继承属性
- Stockbroker Grapevine POJ
- 对基于Servlet+JSP+JavaBean开发模式的用户登录注册的升级
- 欢迎使用CSDN-markdown编辑器
- 文本导出
- Java定位CPU使用高问题
- 新手学习Django的十条注意点
- ubuntu16.04编译opencv for Android
- 【怎样写代码】对象克隆 -- 原型模式(四):浅克隆与深克隆
- 排序方法总结
- Unity3D按ESC退出的脚本代码
- 系统调用的三种方式
- 这 30 类 CSS 选择器,你必须理解!
- C++ STL之vector常见用法