线上的一个日志实时输出的程序曾经出过这样一个问题,刚开始上线java程序占用的CPU的资源很少,但是到了整点的时候,CPU直线飙高,直接到达100%根本没有要下降的趋势,唯一的方法只能杀掉它了,后面在借助jstack与top排查到线程然后定位到某行代码出的问题。

排查演示

使用jps找到程序的pid

[root@logs bin]# ./jps -l -m | grep logdir2

22169 galaxy-log-online-0.1-SNAPSHOT-all.jar 3002 /logdir2

找到22169进程ID

找到CPU过高的线程

top -H -p 22169

top - 19:03:22 up 156 days, 5:57, 4 users, load average: 1.00, 2.84, 4.25

Threads: 15 total, 0 running, 15 sleeping, 0 stopped, 0 zombie

%Cpu(s): 99.4 us, 12.6 sy, 0.0 ni, 62.6 id, 4.8 wa, 0.0 hi, 2.6 si, 0.0 st

KiB Mem : 8010456 total, 206760 free, 1079668 used, 6724028 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 6561460 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

22184 root 20 0 4543356 74148 12960 S 80.0 40.9 0:19.96 java

22169 root 20 0 4543356 74148 12960 S 0.0 0.9 0:00.00 java

22170 root 20 0 4543356 74148 12960 S 0.0 0.9 0:00.35 java

22171 root 20 0 4543356 74148 12960 S 0.0 0.9 0:00.08 java

22172 root 20 0 4543356 74148 12960 S 0.0 0.9 0:00.09 java

...

将线程转为16进制

[root@logs bin]# printf "%x" 22184

56a8

使用jstack定位到线程

[root@logs bin]# ./jstack 22169 | grep 56a8

"Thread-1" #9 prio=5 os_prio=0 tid=0x00007fe428230800 nid=0x56a8 waiting on condition [0x00007fe4121a5000]

使用3D肉眼来查看线程运行的代码了

"Thread-1" #9 prio=5 os_prio=0 tid=0x00007fe428230800 nid=0x56a8 waiting on condition [0x00007fe4121a5000]

java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at java.lang.Thread.sleep(Unknown Source)

at java.util.concurrent.TimeUnit.sleep(Unknown Source)

at com.dounine.tool.http.sql.LogsRequest$4.run(LogsRequest.java:152)

at java.lang.Thread.run(Unknown Source)

然后开始从LogsRequest.java152行开始找起,发现里面有一个死循环...

FIX 它

然后开开心心下班

java程序cpu突然飚高_Java 定位导致CPU飙升的代码过程相关推荐

  1. Java 程序 CPU 使用率过高问题定位与修复

    问题现象:CPU 负载过高 我们线上的 jenkins 系统,时不时会发生 CPU 负载过高的现象. CPU 负载过高后,SRE 同学会收到电话告警. 在我们的监控系统中,可以看到,某些时候,CPU ...

  2. 成都Java程序员工资多高?

    大家都说Java程序员薪资高,前景好,那么成都Java程序员工资多高?今天朗妹就和大家看看工资情况. 通过上图我们可看到近一年的时间9018份样本调查,35.4%的人拿到了10-15K的月薪,平均月薪 ...

  3. java程序cpu突然飚高_高频面试题:Java程序占用 CPU 过高怎么排查

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的.线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一 ...

  4. java cpu高_Java中的CPU占用高和内存占用高的问题排查

    下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...

  5. 简单的cpu飚高问题定位脚本

    老司机在定位和解决问题时都有着自己的一套方法论,总不能老踩一些重复的坑是吧.老司机一般多少都遇到过服务器cpu飚高的问题,定位问题的方法网上文章多如牛毛,现这里再总结一下,对于混部多个Java应用的服 ...

  6. java cpu 占用率高_java实战CPU占用过高问题的排查及解决

    最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID top 2. ...

  7. java资源使用效率较高,Java 进程资源使用率较高问题定位

    在实际开发过程中,有些 Java 程序在本地或者在服务器上都可以运行的较正常,但是运行较长一段时间后,可能会出现资源占用率较高的情况,例如 CPU 或 内存占用率较高等情况,以至于发生内存溢出,进程假 ...

  8. Java 程序员薪资这么高,取决于什么?

    众多行业中,程序员当然属于高薪职业. 无论是国内还是国外,IT行业的程序员.工程师,甚至连码农都要比其他行业的从业者的收入高很多! 但是Java程序员拿多少钱跟有多少经验有关系,但经验的多少跟年限没有 ...

  9. linux环境CPU使用率过高问题定位

    1. 找到cpu占用最高的进程id 通过top命令查看占用最高的进程id 2. 定位到对应java程序 ps -ef | grep 进程pid(或者 jps -l | grep 进程pid) 3. 定 ...

最新文章

  1. 检测到包降级: Microsoft.Extensions.Configuration.Abstractions 从 2.1.1 降 2.1.0
  2. c转义字符以及常见问题和解决方法||c中的注释
  3. Ffmpeg 定位文件(seek file)
  4. pandas:dataframe删除某些不为non的行
  5. 最大期望算法与混合高斯模型的推导
  6. influxdb 插入数据_Influx Sql系列教程五:insert 添加数据
  7. 【Erlang新手成长日记】Erlang开源项目推荐
  8. android ichartjs 曲线图,C#中利用LightningChart绘制曲线图表
  9. SylixOS allwinner h6 链接脚本
  10. 管理感悟:需要什么样的技术文档
  11. 帮同学的忙,随意写了个课程设计(关于循环双向列表)
  12. 投票群体案例介绍(36)
  13. AI自动还原OpenCV制作的九宫格拼图游戏(附源码)
  14. 山东大学人工智能导论实验四 利用神经网络分类红色和蓝色的花
  15. 计算机网络 第五章 课后题答案
  16. 12306android端接口,12306官方火车票Api接口
  17. 物联网毕设(基于STM32的蓝牙检测心率+步数+手机APP)
  18. 使用pycallgraph分析python代码函数调用流程以及框架
  19. 什么是马甲APP?怎么用马甲APP导流
  20. C++学习路线及推荐书籍

热门文章

  1. 分布式交换机配置备份和还原
  2. Guava翻译系列之EventBus
  3. shell timeout
  4. C#_MVC_ajax for form
  5. uva 610(tarjan的应用)
  6. libsvm数据缩放方法
  7. teamcity mysql 配置_CentOS 7 上 TeamCity 安装
  8. jdk安装包_第一章(第1节):安装JDK
  9. 统计指定目录下的视频时长
  10. 四管前级怎么去掉高低音音调_一些歌曲音调太高怎么才能唱上去??