模拟问题代码

构造一个死循环,造成CPU使用率100%。

> vim InfiniteLoop.java
public class InfiniteLoop {public static void main(String[] args) {Runnable target;Thread thread=new Thread(new Runnable() {@Overridepublic void run() {long i=0;while (true){i++;}}});thread.setName("rumenz");thread.start();}
}> javac InfiniteLoop.java

运行问题代码

> java InfiniteLoop

发现系统CPU 100%

> top6076 root      20   0 7096732  18972  10648 S 100.0  0.1   7:42.51 java InfiniteLoop

得到进程号是6076

根据top命令,发现PID为6076的Java进程占用CPU高达100%,出现故障。

找出具体的线程号

> top -Hp 60766096 root      20   0 7096732  18972  10648 R 99.7  0.1   9:09.92 java

得到线程号是6096

将线程号转换成16进制

> printf "%x\n" 6096
17d0

万事具备,开始使用jstack打印堆栈信息


> jstack 6076 | grep 17d0 -A 30"rumenz" #10 prio=5 os_prio=0 tid=0x00007fe0580f9000 nid=0x17d0 runnable [0x00007fe04431d000]java.lang.Thread.State: RUNNABLEat InfiniteLoop$1.run(InfiniteLoop.java:11)at java.lang.Thread.run(Thread.java:748)"Service Thread" #9 daemon prio=9 os_prio=0 tid=0x00007fe0580e5800 nid=0x17ce runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C1 CompilerThread3" #8 daemon prio=9 os_prio=0 tid=0x00007fe0580c8000 nid=0x17cd waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread2" #7 daemon prio=9 os_prio=0 tid=0x00007fe0580c6000 nid=0x17cc waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007fe0580c4000 nid=0x17cb waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007fe0580c1000 nid=0x17ca waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007fe0580bf800 nid=0x17c9 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007fe05808e800 nid=0x17c8 in Object.wait() [0x00007fe044b25000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000076d408ed8> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)- locked <0x000000076d408ed8> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)

at InfiniteLoop$1.run(InfiniteLoop.java:11),提示出代码11行, 查看源码发现有一个死循环。

总结解决JAVA,CPU 100%的问题

  • top 查找CPU 100%的进程号pid
  • top -Hp pid找出进程pid下最占CPU的线程号tid
  • printf "%x\n" tidtid转换成十六进制 16tid
  • jstack pid | grep 16tid -A 30打印堆栈信息
  • 处理问题代码

关注微信公众号:【入门小站】,解锁更多知识点。

jstack处理Java中CPU100%的思路流程相关推荐

  1. 第 1-4 课:Java 中的运算符和流程控制 + 面试题

    算术运算符 Java 中的算法运算符,包括以下几种: 算术运算符 名称 举例 + 加法 1+2=3 - 减法 2-1=1 * 乘法 2*3=6 / 除法 24/8=3 % 求余 24%7=3 ++ 自 ...

  2. Java程序设计语言基础03:Java中的程序执行流程

    目录 1. 简记部分 1.1 条件与循环 1.2 switch语句 1.3 continue与break 2. 变量的作用域 3. 从标准输入读取数据 4. 生成随机数 1. 简记部分 1.1 条件与 ...

  3. java中文件下载的思路(参考:孤傲苍狼)

    文件下载 文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载 文件下载功能的实现思路: 1.获取要下载的文件的绝对路径 2.获取要下载的文件 ...

  4. 在 Java 中 new 一个对象的流程是怎样的?

    对象怎么创建,这个太熟悉了,new一下(其实还有很多途径,比如反射.反序列化.clone等,这里拿最简单的new来讲): Dog dog = new Dog(); 我们总是习惯于固定语句的执行,却对于 ...

  5. 初识Java ~ (二) # Java 中程序的执行流程,(万字长文)特别细~ 可收藏~

    大家好~ ,我是 清汉 时隔一月,懒惰的我终于将 Java 初识系列文章,第二篇程序执行流程码出来了~ 初识Java ~ (一) 从0开始,Java基础知识,双手奉上~ 可收藏!! 应该不算太晚吧,这 ...

  6. 【26天高效学完Java编程】Day03:Java中的运算符与流程控制语句的基本概念与实操

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学完Java编程 相关软件地址:链接地址 所有代码地址:链接地址 如果 ...

  7. java中的方法思路理清

    方法包括两种: 1构造方法:(1)有参数的构造方法,需要自己定义.(2)无参数的构造方法,系统默认. 2成员方法:(1)实例方法:没有static修饰,必须经过实例化才能进行调用,加void就代表无返 ...

  8. java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)

    最近一直在看关于排序相关的算法,从O(n²)的冒泡.插入.选择到O(nlog(n))的归并.快排.再到桶排序.计数排序.基数排序.各个算法都有自己的优点和缺点,那么jdk中关于这种底层的算法是怎么实现 ...

  9. java中byte, iso-8859-1, UTF-8,乱码的根源

    本文作者:@Ryan Miao 本文链接:https://www.cnblogs.com/woshimrf/p/java-utf8-iso-charset.html 版权声明: 本博客所有文章除特别声 ...

最新文章

  1. AI手语主播通过朱广权魔鬼面试,残影级手速无惧贯口,今已正式上岗助力冰雪盛会...
  2. 【ASP.NET】js动态生成的控件,在后台获取不到怎么办?
  3. webStorm Linux Ubuntu 中文搜狗输入问题
  4. BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )
  5. 设置Spring 3开发环境
  6. HoloWAN网络仿真损伤仪的基本功能及图解
  7. 信息学奥赛一本通(C++版)在线评测系统 基础(一) 第一章 参考答案(AC代码)
  8. 电影片段素材网,自媒体必备素材网站推荐,视频素材免费下载网站
  9. python抓取网站数据并图形化显示(二)
  10. 微信公共号如何本地调试
  11. ADC最佳SNR性能取决于输入低噪声信号和基准电压
  12. 电子元件知识汇总2-封装
  13. 飞桨高阶使用教程:自定义CPU算子的实现和使用
  14. 捋一捋Android的转场动画
  15. 2018年7月中华人民共和国县以上行政区划代码
  16. proteus学习之安装最小单片机系统
  17. 51单片机蜂鸣器操作
  18. Notability for Mac(笔记软件)
  19. 统计学习导论(ISLR)(三):线性回归(超详细介绍)
  20. Windows环境下(64bit,内存4G),安装虚拟机(VM12.5),Ubuntu(17.04),anaconda(Python3.6)和TensorFlow(1.3)

热门文章

  1. 希尔排序 最坏时间_算法篇----希尔排序
  2. L1-076 降价提醒机器人 (10 分)-PAT 团体程序设计天梯赛 GPLT
  3. string转int/float/double、int/float/double转string、转字符串数组的方法:stoi、stringstream、scanf、to_string、sprintf
  4. 计算机信息管理是学什么课程设计,毕业论文计算机专业学生信息管理系统(数据库课程设计)...
  5. Linux 中 Iptables 规则定义
  6. java连接mysql数据库增删改查操作记录
  7. 比较LANG和NLS_LANG在Linux中的作用
  8. shell 参数,shell与Java 交互参数
  9. 如何进阶一名有竞争力的程序员?
  10. web3j通过命令行工具新建钱包、更新钱包密码及转账