线程常见问题

CPU占用率很高,响应很慢
CPU占用率不高,但响应很慢
线程出现死锁的情况

CPU占用率不高,但响应很慢

有的时候我们会发现CPU占用率不高,系统日志也看不出问题,那么这种情况下,我们需要去看一下运
行中的线程有没有异常

1、jps命令

通过jps 命令,查看java进程的pid

D:\ideaWorkspace\lf-es-kafka-demo\src\main\java\com\lf\thread\status>jps
24256
31360 Jps
15492 ThreadStatus

2、jstack命令

通过`jstack 查看线程日志

D:\ideaWorkspace\lf-es-kafka-demo\src\main\java\com\lf\thread\status>jstack 15492

如果存在死锁情况,Thread Dump日志里面肯定会给出Found one Java-level deadlock:信息。只要找到这个信息就可以立马定位到问题并且去解决。

Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x0000000026070c88 (object 0x00000007163b7d78, a
java.lang.Integer),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x00000000260735c8 (object 0x0000000716649aa8, a
java.lang.Integer),
which is held by "Thread-1"

CPU占用率很高,但响应很慢

有的时候我们会发现CPU占用率很高,系统日志也看不出问题,那么这种情况下,我们需要去看一下运
行中的线程有没有异常

1、top -c

通过top -c 动态显示进程及占用资源的排行榜,从而找到占用CPU最高的进程PID,得到的
PID=80972

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
80972 root 20 0 7773456 296124 12904 S 100.2 1.8 0:38.83 java

2、top -H -p

然后再定位到对应的线程, top -H -p 80972 查找到该进程中最消耗CPU的线程,得到
PID=81122

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
81122 root 20 0 7773456 258504 12932 R 99.8 1.6 5:56.34 java
80972 root 20 0 7773456 258504 12932 S 0.0 1.6 0:00.00 java

3、printf “0x%x\n”

通过printf “0x%x\n” 81122 命令,把对应的线程PID转化为16进制

[root@localhost test]# printf "0x%x\n" 81122
0x13ce2

4、jstack pid| grep -A 20 0x13ce2

截止执行这个命令jstack 80972 | grep -A 20 0x13ce2 查看线程Dump日志,其中-A 20表示
展示20行, 80972表示进程ID, 0x13ce2表示线程ID

[root@localhost test]# jstack 80972 | grep -A 20 0x13ce2
"Thread-3" #30 daemon prio=5 os_prio=0 tid=0x00007f84500ce000 nid=0x13ce2
runnable [0x00007f84a78f7000]
java.lang.Thread.State: RUNNABLE
at 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 <0x00000006c812f1b0> (a java.io.BufferedOutputStream)
at java.io.PrintStream.write(PrintStream.java:482)
- locked <0x00000006c812f190> (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 <0x00000006c812f2d0> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
at java.io.PrintStream.newLine(PrintStream.java:546)
- eliminated <0x00000006c812f190> (a java.io.PrintStream)
at java.io.PrintStream.println(PrintStream.java:807)
- locked <0x00000006c812f190> (a java.io.PrintStream)
at com.example.threaddemo.WhileThread.run(ThreadController.java:33)
at java.lang.Thread.run(Thread.java:748)

从上述内容可以看出,是WhileThread.run方法中,执行的逻辑导致CPU占用过高。

java多线程基础篇(二)java线程常见问题Thread Dump日志分析相关推荐

  1. JAVA多线程基础篇-关键字synchronized

    1.概述 syncronized是JAVA多线程开发中一个重要的知识点,涉及到多线程开发,多多少少都使用过.那么syncronized底层是如何实现的?为什么加了它就能实现资源串行访问?本文将基于上述 ...

  2. Java多线程基础篇(02)-多线程的实现

    为什么80%的码农都做不了架构师?>>>    1.概要 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Call ...

  3. 【Java进阶营】JAVA多线程基础学习二:synchronized

    本篇主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题,没错就是使用synchronized. 一.如何解决线程安全问题? 一般 ...

  4. java多线程基础篇第一篇-JMM

    1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...

  5. JAVA多线程基础篇-join方法的使用

    1.概述 join()是Thread类中的一个方法,它的作用是将当前线程挂起,等待其他线程结束后再执行当前线程,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行.通常用于在main主 ...

  6. Java面试基础篇之java基础语法之五:类和对象

    目录 1. 类与对象的初步认知 2. 类和类的实例化 3. 类的成员 3.1 字段/属性/成员变量 3.2 方法 (method) 3.3 static 关键字 3.4 小结 4. 封装 4.1 pr ...

  7. Java面试基础篇之java基础语法之五:数组

    目录 1. 数组基本用法 1.1 什么是数组 1.2 创建数组 1.3 数组的使用 2. 数组作为方法的参数 2.1 基本用法 2.2 理解引用类型(重点/难点) 2.3 认识 null 3. 数组作 ...

  8. 三个实例演示 Java Thread Dump 日志分析

    jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition ...

  9. java Thread Dump 日志分析

    jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition ...

最新文章

  1. python视频口碑佳_从万众期待到口碑扑街!用Python来分析一下大家对唐探3的评论...
  2. 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)
  3. 谷歌为什登不上去github_我们分析了GitHub上5.46 亿条日志,发现中国开源虽然贡献大但还有这些不足......
  4. 没想到,Python还可以制作Web可视化页面!
  5. ROS机器人导航仿真(kinetic版本)
  6. “天才”少年!4位90后摘得全球顶尖数学大奖,90%获奖者不满30岁
  7. apache2.2:使一个目录允许执行cgi程序
  8. c#水晶报表连接mysql_C# 水晶报表打印 绑定数据库表
  9. DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)...
  10. Monitor线程同步
  11. verilog 简单module_verilog简易教程
  12. 万物互联-stm32单片机简介、烧录、编程及其项目环境搭建
  13. 谈判如何在谈判中_谈判工作的十大规则
  14. 计算机网络和HTTP协议:HTTP篇
  15. BLDC电机中的死区时间究竟是什么?
  16. win10计算机丢失msvcr,win10系统运行程序提示计算机中丢失msvcr110.dll的教程
  17. opencv3计算机视觉python百度云_OpenCV3计算机视觉Python语言实现笔记(二)
  18. ARP代理(Proxy ARP)
  19. PowerPC Figure – PPC入门与优化
  20. 毕业设计-基于SSM的药店管理系统

热门文章

  1. 关于浏览器内核的一些概念
  2. 删除Android自带的系统软件注意事项
  3. 论《三国演义》里那些细节
  4. mysql5.7应该导什么包_玩泰坦陨落2延迟高卡顿用什么加速器?
  5. php调试之xdebug配置详解
  6. python 位运算实现加减乘除四则运算
  7. 基于新闻的社交王国News.me推离线新闻下载服务
  8. ROS机器人操作系统暑期学校总结和感悟
  9. 【perl脚本】多维HASH的一些使用总结
  10. Speed Grade——芯片的“速度等级”初探(转)