一、top命令定位cpu占用率高的进程号(pid),找到pid后,top -p pid -H,记录出cpu占用率高的线程号(tid),用printf "%x\n" tid将其转换为16进制

二、使用jstack打印进程信息,为准确定位可以多来几次,jstack pid > pid_1.log

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

示例

1、

1 Tasks: 546 total, 1 running, 544 sleeping, 0 stopped, 1zombie2 Cpu(s): 15.3%us, 0.1%sy, 0.0%ni, 84.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st3 Mem: 24633804k total, 23710152k used, 923652k free, 784472k buffers4 Swap: 32764556k total, 127120k used, 32637436k free, 7000668k cached5

6 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+COMMAND7 25930 weblogic 18 0 5311m 4.5g 29m S 488.1 19.3 35663:17java8 16830 weblogic 15 0 13168 1472 824 R 0.7 0.0 0:00.04top9 13834 weblogic 16 0 13028 1424 812 S 0.3 0.0 5900:50top10 17263 weblogic 23 0 2410m 1.5g 28m S 0.3 6.2 390:24.31java11 17438 weblogic 25 0 3429m 1.7g 25m S 0.3 7.2 217:35.39java12 26316 weblogic 23 0 4695m 2.5g 29m S 0.3 10.8 31:47.38java13 1 root 15 0 10372 600 568 S 0.0 0.0 2:12.76init14 2 root RT -5 0 0 0 S 0.0 0.0 22:18.89 migration/0

15 3 root 34 19 0 0 0 S 0.0 0.0 2:38.19 ksoftirqd/0

16 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

17 5 root RT -5 0 0 0 S 0.0 0.0 19:16.83 migration/1

18 6 root 34 19 0 0 0 S 0.0 0.0 6:37.27 ksoftirqd/1

19 7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1

20 8 root RT -5 0 0 0 S 0.0 0.0 11:11.42 migration/2

21 9 root 34 19 0 0 0 S 0.0 0.0 6:59.29 ksoftirqd/2

22 10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2

23 11 root RT -5 0 0 0 S 0.0 0.0 5:36.90 migration/3

进程号 为25930的java进程cpu使用率很高,top -p 25930  -H

1 Tasks: 220 total, 1 running, 219 sleeping, 0 stopped, 0zombie2 Cpu(s): 8.7%us, 0.1%sy, 0.0%ni, 91.2%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st3 Mem: 24633804k total, 23712492k used, 921312k free, 784472k buffers4 Swap: 32764556k total, 127120k used, 32637436k free, 7000868k cached5

6 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+COMMAND7 25960 weblogic 15 0 5311m 4.5g 29m S 51.9 19.3 5615:15java8 25941 weblogic 16 0 5311m 4.5g 29m S 15.0 19.3 798:46.36java9 25939 weblogic 15 0 5311m 4.5g 29m S 11.3 19.3 798:26.28java10 25951 weblogic 15 0 5311m 4.5g 29m S 11.3 19.3 799:05.00java11 25936 weblogic 15 0 5311m 4.5g 29m S 11.0 19.3 799:14.41java12 25937 weblogic 15 0 5311m 4.5g 29m S 11.0 19.3 798:37.65java13 25943 weblogic 15 0 5311m 4.5g 29m S 11.0 19.3 799:30.19java14 25944 weblogic 15 0 5311m 4.5g 29m S 11.0 19.3 799:58.25java15 25945 weblogic 15 0 5311m 4.5g 29m S 11.0 19.3 798:56.29 java

tid为25960的线程cpu使用率很高。

1 [weblogic@shtpeb2b2eapp01 adminserver]$ printf "%x\n" 25960

2 6568

2、使用jstack打印进程信息并导入日志文件

jstack 25930 >25930_1.log

jstack 25930 >25930_2.log

jstack 25930 >25930_3.log

3、查看相关日志信息

1 [weblogic@shtpeb2b2eapp01 bin]$ grep -A 10 0x656825930_1.log2 "Concurrent Mark-Sweep GC Thread" prio=10 tid=0x0000000048b59000 nid=0x6568runnable3 "Gang worker#0 (Parallel CMS Threads)" prio=10 tid=0x0000000048b4f000 nid=0x6563runnable4

5 "Gang worker#1 (Parallel CMS Threads)" prio=10 tid=0x0000000048b51000 nid=0x6564runnable6

7 "Gang worker#2 (Parallel CMS Threads)" prio=10 tid=0x0000000048b53000 nid=0x6565runnable8

9 "Gang worker#3 (Parallel CMS Threads)" prio=10 tid=0x0000000048b54800 nid=0x6566runnable10

11 "Gang worker#4 (Parallel CMS Threads)" prio=10 tid=0x0000000048b56800 nid=0x6567runnable12

13 [weblogic@shtpeb2b2eapp01 bin]$ grep -A 10 0x656825930_2.log14 "Concurrent Mark-Sweep GC Thread" prio=10 tid=0x0000000048b59000 nid=0x6568runnable15 "Gang worker#0 (Parallel CMS Threads)" prio=10 tid=0x0000000048b4f000 nid=0x6563runnable16

17 "Gang worker#1 (Parallel CMS Threads)" prio=10 tid=0x0000000048b51000 nid=0x6564runnable18

19 "Gang worker#2 (Parallel CMS Threads)" prio=10 tid=0x0000000048b53000 nid=0x6565runnable20

21 "Gang worker#3 (Parallel CMS Threads)" prio=10 tid=0x0000000048b54800 nid=0x6566runnable22

23 "Gang worker#4 (Parallel CMS Threads)" prio=10 tid=0x0000000048b56800 nid=0x6567 runnable

从输出信息来看,此线程是JVM的GC线程,此时可以基本确定是内存不足或内存泄露导致gc线程持续运行,导致CPU占用过高。

所以接下来我们要找的内存方面的问题。

1 [weblogic@shtpeb2b2eapp01 bin]$ jstat -gcutil 25930 2000 10

2 S0 S1 E O P YGC YGCT FGC FGCT GCT3 0.00 0.00 94.78 100.00 87.22 1035 92.722 251436 158050.083 158142.805

4 0.00 0.00 94.78 100.00 87.22 1035 92.722 251437 158050.083 158142.805

5 0.00 0.00 94.78 100.00 87.22 1035 92.722 251438 158051.345 158144.067

6 0.00 0.00 94.79 100.00 87.22 1035 92.722 251438 158052.279 158145.001

7 0.00 0.00 94.79 100.00 87.22 1035 92.722 251439 158052.279 158145.001

8 0.00 0.00 94.79 100.00 87.22 1035 92.722 251440 158053.553 158146.275

9 0.00 0.00 94.79 100.00 87.22 1035 92.722 251440 158054.475 158147.197

10 0.00 0.00 94.79 100.00 87.22 1035 92.722 251441 158054.475 158147.197

11 0.00 0.00 94.79 100.00 87.22 1035 92.722 251441 158055.753 158148.475

从输出信息可以看出,Eden区内存占用95%,Old区内存占用100%,根据这些信息,基本可以确定是程序代码上出现了问题,可能存在不合理创建对象的地方。

使用文档编辑器打开日志

发现大量的线程等待以及被锁住的资源,然后丢给相关开发同事

java cpu_JAVA定位CPU占用率高相关推荐

  1. 如何定位cpu占用率高的java线程

    如何定位cpu占用率高的java线程 工具: 1 jstack:jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&q ...

  2. jstack定位CPU占用率高的线程代码

    目录 一.背景 二.jstack定位实战演示 三.关于线程的状态 四.最后 一.背景 性能测试过程中,如果我们发现应用服务器CPU使用率高(超过70%),接口TPS低的现象,此时常见的情况是由以下的原 ...

  3. 服务器定位cpu高占用率代码php,面试官:线上服务器CPU占用率高如何排查定位问题?,...

    面试官:线上服务器CPU占用率高如何排查定位问题?, 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果 ...

  4. 一次服务器CPU占用率高的定位分析

    背景 通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的.幸亏由于我们的服务进程由多个相同worker(线程)调度承担的,所以除了CPU占用率高之外,并没有 ...

  5. netty cpu 占用率 高_交换机CPU使用率高问题定位

    诊断工具 display工具 log工具 报文冲击导致的CPU使用率高问题 CPU使用率高问题信息采集 诊断工具 display cpu-usage [ slot x ] display cpu-de ...

  6. Java CPU占用率高分析

    首先,通过top命令找出CPU占用率高的进程: 然后,通过ps -o THREAD,tid,time -mp 2066命令找出执行时间最长的线程的TID 将有问题的TID转为16进制格式: print ...

  7. 原创|面试官:线上服务器CPU占用率高如何排查定位问题?

    国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题 ...

  8. 服务器cpu占用率高怎么解决,线上服务器CPU占用率高怎么办?

    如果线上服务器发生CPU占用率高时,应该如何排查并定位问题. 1.问题发现 本文整理自一个真实的案例,是楼主负责的业务,在一次大促之前的压测时发现了这个问题. 在每次大促之前,我们的测试人员都会对网站 ...

  9. 面试官:线上服务器CPU占用率高如何排查定位问题?

    开发十年,就只剩下这套架构体系了!! 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下:  ...

  10. 线上服务器CPU占用率高如何排查定位问题?

    (关联着看看这篇文章:https://blog.csdn.net/u011277123/article/details/103768939) 解决问题的能力以超高比例排名第一,这也是为什么很多面试过程 ...

最新文章

  1. Java网络编程笔记2
  2. python爬取知乎热搜_python爬取知乎评论
  3. Android Studio项目转Eclipse项目
  4. linux php7 yum 卸载,Linux_在Centos中yum安装和卸载软件的使用方法,安装一个软件时 yum -y install h - phpStudy...
  5. iphone桌面上的圆圈怎么设置_iPhone的备忘录如何排序?什么便签可以更改排列展示顺序...
  6. 1. Magento2 --- (1) theme ---create a theme
  7. 【无机纳米材料科研制图——OriginLab 0204】Origin细胞存活率柱状图绘制
  8. 光伏发电系统红外热图像(227幅图像,无标签,可用于识别蜗牛尾迹与热点故障)
  9. nyoj234 吃土豆
  10. 2020 微信头像圣诞帽来啦,快给 TA 戴帽子吧~
  11. 下载加速小妙招,我不允许你不知道
  12. php 58房源采集,如何用火车采集器采集二手房数据
  13. Jquery版本对IE浏览器的支持
  14. Scp全量远程拷贝(推送、拉取)
  15. javacore日志分析工具jca
  16. LS1028修改调试串口
  17. 基于大数据的保险商业模式
  18. 【博学谷学习记录】超强总结,用心分享|大数据之数仓分层
  19. laravel多库操作
  20. 3D向量叉乘的理解和记忆

热门文章

  1. 查看Linux服务器网络状态
  2. java日期去掉时分秒,只保留年月日
  3. mysql中to_char()和str_to_date()函数
  4. Python 面向对象一(转载)
  5. 《HTML5+CSS3网页设计入门必读》——1.11 小结
  6. python之6-1常用函数
  7. PCurve - Curve on Surface
  8. greenplum管理员日常任务
  9. EBS相关日志和参数
  10. 消费者反映鸡蛋难吃后的37种回答方法