`

JVM问题排查

 
阅读更多

一、CPU问题排查

 

1、jstack命令查看线程运行情况

 

1)死锁,Deadlock(重点关注) 

 

2)执行中,Runnable   

 

3)等待获取监视器,Waiting on monitor entry(重点关注),此线程还未进入对象的synchronized的方法,还在Entry Set中等待。

 

"RMI TCP Connection(267865)-172.16.5.25" daemon prio=10 tid=0x00007fd508371000 nid=0x55ae waiting for monitor entry [0x00007fd4f8684000]

   java.lang.Thread.State: BLOCKED (on object monitor)

at org.apache.log4j.Category.callAppenders(Category.java:201)

- waiting to lock <0x00000000acf4d0c0> (a org.apache.log4j.Logger)

at org.apache.log4j.Category.forcedLog(Category.java:388)

at org.apache.log4j.Category.log(Category.java:853)

at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:234)

at com.tuan.core.common.lang.cache.remote.SpyMemcachedClient.get(SpyMemcachedClient.java:110)

 

4)等待资源,Waiting on condition(重点关注),此线程在等待一个条件的发生,来把自己唤醒,或者调用了sleep方法。此时线程的状态:

          WAITING(parking):一直等待那个条件发生

          TIMED_WAITING(parking或sleeping):定时等待,即使条件不发生,时间到了也可以自己唤醒

          如果发现大量线程处于此状态,并且从线程的堆栈上查看到是正在执行网络读写,这可能是一个网络瓶颈问题或者第三方响应慢的问题

"RMI TCP Connection(idle)" daemon prio=10 tid=0x00007fd50834e800 nid=0x56b2 waiting on condition [0x00007fd4f1a59000]

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

at sun.misc.Unsafe.park(Native Method)

- parking to wait for  <0x00000000acd84de8> (a java.util.concurrent.SynchronousQueue$TransferStack)

at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)

at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)

at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)

at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)

at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:662)

 

 

5)等待对象,Object.wait() 或 TIMED_WAITING,此线程已经进入了synchronized的方法,由于某种原因手动调用了对象的wait方法,放弃了Monitor,进入Wait Set队列。

         此时线程状态大致为以下几种:TIMED_WAITING (on object monitor)和 WAITING (on object monitor)。

只有当别的线程在该对象上调用了 notify() 或者 notifyAll() ,“ Wait Set”队列中线程才得到机会去竞争,但是只有一个线程获得对象的 Monitor,恢复到运行态。

 

"RMI RenewClean-[172.16.5.19:28475]" daemon prio=10 tid=0x0000000041428800 nid=0xb09 in Object.wait() [0x00007f34f4bd0000]

   java.lang.Thread.State: TIMED_WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

- waiting on <0x00000000aa672478> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)

- locked <0x00000000aa672478> (a java.lang.ref.ReferenceQueue$Lock)

at sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run(DGCClient.java:516)

at java.lang.Thread.run(Thread.java:662)

 

6)暂停,Suspended

 

7)阻塞,Blocked(重点关注)  

 

8)停止,Parked

 

二、内存问题排查

 

1、jmap查看堆内存

 

  jmap -heap pid

  jmap -histo:live pid > memory.log   统计所有存活对象的个数,观察那些数量最多的对象,特别是自己写的对象和存放到集合里没有释放的对象

  jmap -dump 导出整个Heap,然后使用工具进行分析,注意看自己写的类的依赖关系,看看是不是使用完没有释放,或者一次性查询过多的数据导致内存溢出

 

 

2、jstat查看虚拟机内存,包括gc情况

 

  jstat -gc pid 1000

  jstat -gcutil pid 1000

  如果Old区的使用情况接近100%,则代表内存不足

  

     S0       S1       E        O          P       YGC     YGCT    FGC    FGCT     GCT   

    54.62   0.00     42.87    43.52      86.24     1792    5.093   33    7.670    12.763

 

S0:新生代的susvivor0区,空间使用率为54..62%

 

S1:新生代的susvivor1区,空间使用率为0.00%(因为还没有执行第二次minor收集)

 

E:eden区,空间使用率42.87%

 

O:旧生代,空间使用率43.52%

 

P:持久带,空间使用率86.24%

 

YGC:minor gc执行次数1792次

 

YGCT:minor gc耗费的时间5.093毫秒

 

FGC:full gc执行次数33

 

FGCT:full gc耗费的时间7.670毫秒

 

GCT:gc耗费的总时间12.763毫秒

 

 

三、网络问题排查

 

分享到:
评论

相关推荐

    jvm问题排查

    ### JVM问题排查工具手册 #### 一、概述 在日常的软件开发与维护过程中,针对JVM(Java虚拟机)的性能调优和问题排查是非常关键的一环。本手册旨在提供一套全面且实用的JVM问题排查方法和技术,帮助开发者快速定位...

    jvm故障排查,jvm故障排查

    jvm故障排查

    JVM 基础 JAVA 并发 JVM 性能调优 LeetCode 算法 .......

    "JVM 基础知识点" JVM(Java Virtual Machine)是 Java 语言的运行环境,负责执行 Java 字节码。...排查 JVM 问题可以使用 jmap 查看 JVM 中各个区域的使用情况,可以使用 jstack 查看 JVM 中的线程信息。

    【Java面试+Java学习指南】一部分大部分Java招聘所需要掌握的核心知识

    JVM问题排查工具-JMC IDEA开发神器 线上调试神器-btrace Git原理与工作流程 Linux常用分析工具 数据结构与算法 从二叉搜索树到B+树 经典问题之字符串 经典问题之TOPK 最大公共子串 动态规划 大厂面试爱问的「调度...

    Java学习指南,涵盖大部分Java程序员所需要掌握的核心知识

    JVM问题排查工具-JMC IDEA开发神器 线上调试神器-btrace Git原理与工作流 Linux常用分析工具 数据结构与算法 从二叉搜索树到B+树 经典问题之字符串 经典问题之TOPK 最大公共子串 动态规划 大厂面试爱问的「调度算法...

    JVM 排查工具 mat JDK 11

    《JVM排查工具MAT在JDK 11中的应用与OOME问题解决》 Java虚拟机(JVM)是Java程序运行的基础,然而在复杂的系统环境中,内存管理问题时常出现,其中最典型的便是OutOfMemoryError(OOME)。为了解决这类问题,...

    美团JVM问题定位和排错

    ### 美团JVM问题定位和排错 #### 背景 在现代软件开发中,Java虚拟机(JVM)作为运行Java程序的基础平台,对于任何使用Java语言进行开发的服务都至关重要。然而,在实际运行过程中,由于复杂的运行环境和技术栈的...

    JVM内存问题排查

    初步诊断思路考虑是不是这台机器上的某个服务把内存撑爆了,所以开始排查内存问题,使用jdk自带脚本,进行内存诊断分析。 1.查看所有Java应用占用的进程(linux常用的是ps -ef|grep java) jps -l 2.查看需要监控...

    Java虚拟机调优及问题排查手册.docx

    JVM排查是指通过各种命令和工具来排查JVM的状态和性能问题。常用的命令包括tasklist、jps、wmic process等。这些命令可以用来查看当前的进程、进程路径、命令行、进程ID、父进程ID、线程数、内存使用情况等信息。 ...

    Java8 Jdk JVM学习笔记、jdk1.8、SpringBoot、内存与垃圾回收、类加载子系统、运行时数据区、本地方法等

    Java8 Jdk JVM学习笔记、jdk1.8、SpringBoot; 主要内容为 JVM 内存与垃圾回收、类加载子系统、运行时数据区、本地方法等。适合开发1-3年想对JVM学习的...在之后的开发中,更加详细的了解JVM,可以进行JVM问题排查。

    JVM问题诊断常用命令

    ### JVM问题诊断常用命令详解 在Java开发与运维过程中,针对JVM(Java虚拟机)进行性能调优、故障排查是非常重要的环节。本文将详细介绍三种常用的JVM问题诊断工具:`jinfo`、`jmap` 和 `jstack` 的功能、用法以及...

    Java工程师技能图谱.pdf

    同时,还需要熟练掌握JVM的线程堆栈等数据分析、内存dump和内存分析工具,以及JVM问题排查分析的常用手段和性能调优的最佳实践经验。 2. 多线程和并发编程:需要掌握线程、锁、synchronized、volatile、final、...

    jdk,jvm源码

    了解JVM源码可以帮助我们深入理解Java程序的运行过程,优化内存使用,提升程序性能,排查故障。例如,通过阅读垃圾回收器的源码,我们可以学习如何调整参数以适应不同的应用场景;通过分析类加载机制,可以实现...

    线上adplatform集群机器cpu飙升问题排查总结.docx

    JVM性能优化与问题排查经验总结 本文总结了线上adplatform集群...在排查问题时,我们还发现了adplatform机器的JVM参数设置不合理,导致了性能问题。因此,我们需要对JVM参数进行调整,以提高adplatform机器的性能。

    jvm死锁jar包用于排查学习

    jvm死锁jar包用于排查学习

    jvm-mon基于控制台的JVM监视

    虽然`jvm-mon`提供了基本的JVM监控功能,但更复杂的性能问题可能需要结合其他专业工具,如JProfiler、VisualVM、YourKit等,它们提供更深入的分析和故障排查能力,如方法调用时间线、内存分配跟踪、线程栈深度等。...

    JAVA面试八股文.pptx

    - **JVM问题排查**: 使用`jstack`查看线程状态,`jmap`分析内存,`jconsole`或`VisualVM`监控应用性能。 - **类加载机制**:双亲委派模型,类加载器先尝试委托父类加载器,直到委派到Bootstrap ClassLoader,找不...

    JVM调优和故障排除手册

    标题《JVM调优和故障排除手册》预示着文档将专注于Java虚拟机(JVM)的性能调优以及如何诊断和解决在JVM环境中遇到的问题。JVM是运行Java程序的核心,负责提供内存管理、垃圾回收、多线程处理以及本地方法调用等服务...

    Java常见问题排查

    ### Java常见问题排查 #### NoSuchMethodException **出现原因:** `NoSuchMethodException`异常通常发生在尝试通过反射机制调用类的方法时,该类没有对应签名的方法。这可能是因为类库版本不一致导致方法签名的...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路; 4、基础知识讲解透彻、详尽; 5、JVM零基础也能听懂。 第一节:学习JVM的意义和目标 1.1 意义: 1.2 目标: 第二节:JVM内存模型 1.1 概念 1.2 ...

Global site tag (gtag.js) - Google Analytics