java多线程基础篇(二)java线程常见问题Thread Dump日志分析
线程常见问题
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日志分析相关推荐
- JAVA多线程基础篇-关键字synchronized
1.概述 syncronized是JAVA多线程开发中一个重要的知识点,涉及到多线程开发,多多少少都使用过.那么syncronized底层是如何实现的?为什么加了它就能实现资源串行访问?本文将基于上述 ...
- Java多线程基础篇(02)-多线程的实现
为什么80%的码农都做不了架构师?>>> 1.概要 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Call ...
- 【Java进阶营】JAVA多线程基础学习二:synchronized
本篇主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题,没错就是使用synchronized. 一.如何解决线程安全问题? 一般 ...
- java多线程基础篇第一篇-JMM
1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...
- JAVA多线程基础篇-join方法的使用
1.概述 join()是Thread类中的一个方法,它的作用是将当前线程挂起,等待其他线程结束后再执行当前线程,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行.通常用于在main主 ...
- Java面试基础篇之java基础语法之五:类和对象
目录 1. 类与对象的初步认知 2. 类和类的实例化 3. 类的成员 3.1 字段/属性/成员变量 3.2 方法 (method) 3.3 static 关键字 3.4 小结 4. 封装 4.1 pr ...
- Java面试基础篇之java基础语法之五:数组
目录 1. 数组基本用法 1.1 什么是数组 1.2 创建数组 1.3 数组的使用 2. 数组作为方法的参数 2.1 基本用法 2.2 理解引用类型(重点/难点) 2.3 认识 null 3. 数组作 ...
- 三个实例演示 Java Thread Dump 日志分析
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition ...
- java Thread Dump 日志分析
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition ...
最新文章
- python视频口碑佳_从万众期待到口碑扑街!用Python来分析一下大家对唐探3的评论...
- 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)
- 谷歌为什登不上去github_我们分析了GitHub上5.46 亿条日志,发现中国开源虽然贡献大但还有这些不足......
- 没想到,Python还可以制作Web可视化页面!
- ROS机器人导航仿真(kinetic版本)
- “天才”少年!4位90后摘得全球顶尖数学大奖,90%获奖者不满30岁
- apache2.2:使一个目录允许执行cgi程序
- c#水晶报表连接mysql_C# 水晶报表打印 绑定数据库表
- DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)...
- Monitor线程同步
- verilog 简单module_verilog简易教程
- 万物互联-stm32单片机简介、烧录、编程及其项目环境搭建
- 谈判如何在谈判中_谈判工作的十大规则
- 计算机网络和HTTP协议:HTTP篇
- BLDC电机中的死区时间究竟是什么?
- win10计算机丢失msvcr,win10系统运行程序提示计算机中丢失msvcr110.dll的教程
- opencv3计算机视觉python百度云_OpenCV3计算机视觉Python语言实现笔记(二)
- ARP代理(Proxy ARP)
- PowerPC Figure – PPC入门与优化
- 毕业设计-基于SSM的药店管理系统