当前位置 > 首页 > 国际新闻 > 正文

线上java JVM问题排查
  • 发布时间:2020-03-21
  • www.zzqgjd.cn
  • 作者:夏洛天天

    第一部分?这是我以前公司的一个官方案例:“第二部分写在我的另一个博客上。它主要是在发现人们最近问了更多的问题之后写的?

    网上真实故障案例的第一部分

    以下是一个旧系统。代码编写中的一个小问题导致了这样一个问题,即JVM占了太多的空间。在正常情况下,当CPU负载不高时,大约有213,336,000个,而实际上有300,000个。然而,300,000多一点是阈值,并且累积将发生。

    这是扎比克斯的中央处理器监控图。可以看出,在某些时候,中央处理器会出现性能故障:

    经与同事讨论,发现卡夫卡制作人在系统框架中使用线程池,但设置相对较小,消息量相对较大,导致消息堆积

    我建议增加项目中的线程数量。

    以下是分析过程:

    从图中可以看出,堆内存已经占用了1.4G,可能存在内存泄漏的风险。

    2。建议检查转储文件中线程的CPU消耗。

    a .由于线程的不停循环,可能导致中央处理器过高;

    在线问题当时的中央处理器使用情况如图所示:

    以下是java内存转储

    =============================

    第二部分JVM常见故障排除步骤

    查看java线程

    this输出java进程pid

    查看java线程

    查看java线程

    如图所示,这个线程比较耗时。看看他在做什么

    注意需要转换线程pid的十六进制值,然后jstack。

    更多信息可以打印

    # jstack PID | GREP-a 2649d

    Reference:由JVM调整的JSTACK找到消耗最多cpu的线程,并定位代码

    top jstack以分析cpu过高的原因

    1 . jstack

    此时使用jstack命令输出线程堆栈

    2 . jmap

    2 . jmap

    # jmap-dump : live,format=b,file=dump.bin?6900

    -dump : [live,] format=b,file=将jvm的堆内容输出到file=中。

    live子选项是可选的。如果指定实时选项,则只有实时对象才会输出到文件中。

    Java命令学习系列(3): JMAP

    JMAP视图堆内存大小

    JMAP-堆?注:jvm在使用jmap时处于停顿状态,只有在服务不可用时才能用来解决问题,否则会发生服务中断。

    使用jmap -histo[:live] pid查看堆内存中对象数量和大小的统计直方图。如果您带来了活的,将只计算活的物体,如下所示:

    # JMAP-HISTO :活的管道仪表流程图| MORE

    使用jmap和MAT来分析JVM堆内存

    jsttat-gcutilpid

    250毫秒采样4次

    可以看到:

    堆内存=年轻一代老一代永久一代

    年轻一代=伊甸园区域两个幸存者区域(从和到)

    现在解释每一列的含义:

    S0C,S1C,S0U,S1U:幸存者0/1区域容量和已用)

    EC,EU:伊甸园区域容量和使用

    OC,OU:老一代容量和使用

    PC,PU:永久发电容量和使用

    YGC, YGT:年轻一代气相色谱时间和气相色谱时间消耗

    FGC,Fgct:完全气相色谱时间和完全气相色谱时间消耗

    gct:气相色谱总时间消耗

    E,hprof(堆/cpu分析工具)

    # gdb-q-pid=1990

    # gdb-q-pid=1990

    (gdb)生成-核心-文件

    (gdb)分离

    (gdb)退出

    jmap -dump:format=b,文件=堆. hprof/usr/lib/JVM/JRE-1 . 7 . 0-open

    需要对应于特定jdk的bin/java

    引用:

    gcore获取程序核心转储文件,但程序不需要退出。gdb分析核心java程序性能分析的线程转储和头转储?

    5。堆外内存泄漏分析

    Top java占用大量内存,而jmap占用少量内存,这表明存在堆外内存泄漏。

    参考Java堆外内存泄漏分析

    综合使用参考:JVM性能调优监控工具jps、jstack、jmap、jhat、JSAT、hprof使用详细信息

    JVM性能调优监控工具主题1: JVM自有性能调优工具(JPS、JSTACK、JMAP、JHAT、JSAT、HPROF)

    JVM性能调优监控工具主题2:在VisualVM基础章节中监控JVM内存。中央处理器,线程

    下面的一些写得很好。如果你觉得不够开心,你可以继续阅读“如何使用MAT进行内存泄漏分析

    jvm Series 6,windows使用jdk自己的工具jps和jstack找出性能最差的代码”。[在视窗下更实用]

    8 JVM中OOM的原因和解决方案

    采访者问:如果你平时遇到高CPU和频繁的GC,你会如何检查[的判断标准]。

    1。如果有太多的完全垃圾收集时间,那么通过jstack获得的线程信息将是像虚拟机线程一样的线程;

    2。如果代码中存在耗时的计算,那么我们得到的是线程的特定堆栈信息。

    3。如果说在接口中存在某个位置是很耗时的,因为我们的访问频率非常高,那么大多数线程最终会在阻塞点阻塞,这样我们就可以通过具有相同堆栈日志的多个线程基本上定位耗时代码在接口中的位置。

    4 .等待条件

    如果线程本身应该处于等待状态,例如用户创建的线程池中处于空闲状态的线程,则该线程的堆栈信息将不包含用户定义的类。所有这些都可以消除,剩下的线程基本上可以被确认为我们正在寻找的有问题的线程。从它的堆栈信息中,我们可以确切地知道代码导致线程等待的位置。

    5 .死锁死锁死锁这种情况基本上很容易找到

    ====================================

    由于系统架构不合理,比如内存过多,这种情况可以提前避免,只要稍微调整一下系统。建议您看看我精心设计的《高性能微服务架构设计模式》课程。您将极大地改进系统架构。

    高性能微服务体系结构设计模式

    Keynote:夏洛天天

    目前,企业开发是基于微服务体系结构,但存在许多问题,如分布式定义、如何拆分分布式微服务、何时拆分以及如何实现高性能。为了解决这些问题,我录制了一段学习视频。如果您有任何学习问题,请给我留言

    视频地址:

    开放高性能系统架构的分布式理论基础

    开放高性能系统架构的分布式理论基础

    模型可扩展AKF立方体

    问题级电子商务网站遇到的问题QPS

    模型CQRS模型架构设计

    模型事件可追溯模型架构设计

    期末新问题

    精彩图片分享课程:

    白云信息网 版权所有© www.zzqgjd.cn 技术支持:白云信息网 | 网站地图