转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519
感谢作者:ch999999999999999999

Java 线上cpu占用过高分析

1、top 命令查看占用过高线程

 9401 root      20   0 3163948  43592  11932 S   1.3  1.2   0:15.81 java                                                                    2609 polkitd   20   0 1333984 209256  11044 S   0.3  5.6   1:27.59 mysqld
13301 root      10 -10  145952  20784   5980 S   0.3  0.6  84:17.34 AliYunDun
23125 polkitd   20   0 1780292 514228  11512 S   0.3 13.8  19:45.03 mysqld
  • 1
  • 2
  • 3
  • 4

可以看出pid 为9401的线程占用过高

2、查看是哪个线程占用过高, 哪个线程耗费了多长时间

ps -mp 9401 -o THREAD,tid,time参数
// 参数解释
-m 显示所有的线程
-p pid 进程使用cpu的时间
-o 该参数是用户自定义格式

USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root      1.8   -    - -         -      -     - 00:00:20
root      0.0  19    - futex_    -      -  9401 00:00:00
root      1.7  19    - n_tty_    -      -  9402 00:00:19
root      0.0  19    - futex_    -      -  9403 00:00:00
root      0.0  19    - futex_    -      -  9404 00:00:00
root      0.0  19    - futex_    -      -  9405 00:00:00
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以看出9402线程 占用过高

3、将线程id转换为16进制格式(英文字母小写格式) -> printf “%x\n” 有问题的线程id

printf "%x\n" 9402
  • 1

结果: 24ba

4、jstack 进程ID|grep tid(16进制线程小写英文) -A60

jstack 9402 | grep 24ba -A60
  • 1

结果:

"main" #1 prio=5 os_prio=0 tid=0x00007fc380009800 nid=0x2c84 runnable [0x00007fc387caa000]java.lang.Thread.State: RUNNABLEat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:326)at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)- locked <0x00000000c701b490> (a java.io.BufferedOutputStream)at java.io.PrintStream.write(PrintStream.java:482)- locked <0x00000000c7004fb0> (a java.io.PrintStream)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)- locked <0x00000000c7004f70> (a java.io.OutputStreamWriter)at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)at java.io.PrintStream.newLine(PrintStream.java:546)- eliminated <0x00000000c7004fb0> (a java.io.PrintStream)at java.io.PrintStream.println(PrintStream.java:737)- locked <0x00000000c7004fb0> (a java.io.PrintStream)at TestJavaLinux.main(TestJavaLinux.java:11)

“VM Thread” os_prio=0 tid=0x00007fc380073000 nid=0x2c87 runnable

“GC task thread#0 (ParallelGC)” os_prio=0 tid=0x00007fc38001e800 nid=0x2c85 runnable

“GC task thread#1 (ParallelGC)” os_prio=0 tid=0x00007fc380020800 nid=0x2c86 runnable

“VM Periodic Task Thread” os_prio=0 tid=0x00007fc3800bf000 nid=0x2c8e waiting on condition

JNI global references: 5

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

由此可见是 at TestJavaLinux.main(TestJavaLinux.java:11) 我们的11行代码产出的原因

我们在代码里面写了死循环

5、注意:

注意:这里要使用程序启动的用户执行此命令

使用root会提示:

Unable to open socket file: target process not responding or HotSpot VM not loaded

The -F option can be used when the target process is not responding

Java 线上cpu占用过高分析相关推荐

  1. java线上CPU、内存打满处理

    java线上内存打满处理 1.环境说明 2.mac 启动jvisualvm 3.模拟堆内存溢出 4. JVM参数-XX:+HeapDumpOnOutOfMemoryError 5.执行模块方法 6.发 ...

  2. 一次jvm导致线上内存占用过高问题定位

    背景:8G物理内存,8核CPU,jvm使用的G1垃圾回收器. 问题:线上内存占用告警,内存占用超过85%,且现象一直持续. 分析 看一下jvm启动参数配置: -Xms6144m -Xmx6144m - ...

  3. Java线上CPU内存冲高问题排查步骤

    1 引言 作为一名从事Java开发快一年的程序员,在线上经常碰到某个模块的Pod发出CPU与内存告警的问题,而这些问题会导致系统响应缓慢甚至是服务不可用.一般情况下可以通过重启或者调高Pod的资源量或 ...

  4. java 一次CPU占用过高问题的排查及解决,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  5. 线上CPU负载过高处理

    一.背景 线上CPU报警 占用率过 90% 告警了一晚上 第二天才处理的. 二.处理 1.top 命令 使用 top 命令查看后,load average 也是超负荷的状态,用户态的CPU占比 确实很 ...

  6. java应用CPU占用过高分析、C2 Compiler Thread高CPU占用分析

    文章目录 1. 查找进程下占用过高CPU的线程 1.1 查找应用对应的pid 1.2 查看哪个线程cpu占用高,确定对应的线程id: 1.3 计算线程id的十六进制值 1.4 打印线程堆栈内容 2. ...

  7. 记录一次线上CPU负载过高的排查过程

    背景 一大早收到运维同学反馈.线上某台机器cpu的负载达到了97%以上,为了不影响机器上服务的正常运行,急需找到导致负载过高的原因并将负载降到合理的区间. 用到命令 top/uptime:查看负载情况 ...

  8. Java项目服务器cpu占用过高怎么办?

    借用汤师爷的一句话:"麻匪一定要缴---没有麻匪的日子才是好日子". 作为程序员,bug一定是要处理的,没有bug的日子才是好日子!你想想,你正吃着火锅唱着歌,突然收到生产环境异常 ...

  9. 如何定位线上CPU占用过高的问题

    服务器线上问题开发系列 文章目录 服务器线上问题开发系列 前言 一.定位问题流程 二.使用实例流程 1.代码 2.定位问题实践过程 总结 前言 一.定位问题流程 项目上线,CPU飙高不下,触发报警,如 ...

最新文章

  1. PS2019画笔工具、铅笔工具、颜色替换工具
  2. 防护很重要!教你教你认识和检验安防产品的IP防护等级
  3. Git的冲突解决过程
  4. java类似goto_原来java中也有类似goto语句的标签啊--java label标签
  5. Sql 语句收集——行转列
  6. 4.6上午口语练习 阅读词汇
  7. redhat linux 7 ntp,技术|RHCE 系列(十):在 RHEL/CentOS 7 中设置 NTP(网络时间协议)服务器...
  8. Java的几个不错的网站
  9. vue2.0 $set()的用法
  10. iPhone手机硬件拆解介绍
  11. element el-table表头添加背景图片
  12. 如何根据IP地址获取局域网内的主机名称
  13. 二分查找的左右逼近法
  14. Jzoj4896 兔子
  15. C# Find() 与 FindAll()方法的使用
  16. 操作系统的概念 (OS学习笔记)
  17. Mathcad使用数学表达式
  18. 一部值得收藏的PDA进化史
  19. Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码
  20. python3中文件的读与写

热门文章

  1. (附源码)springboot旧物回收管理系统 毕业设计 221713
  2. pqc的中文全称_PQC ,IQC ,QC 这三个之间是什么关系?有什么不同?
  3. 决定面试成败的3个独立思考能力面试题
  4. hao123网址之家--智能计算器 html源代码
  5. Android 浅谈适配全面屏、刘海屏、水滴屏
  6. 卸载百度软件修复服务器,技术员修复win10系统重装后自带百度卫士无法卸载的办法...
  7. 【MATLAB教程案例4】直接序列扩频通信系统的MATLAB仿真
  8. ubuntu打开rar文件方法
  9. C语言中whlie(1)跳出循环的三种结束方式
  10. Office含有多个“需要激活。。。”授权信息无法删除的解决办法(包含了管理员切换到指定目录,在最后面)