码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java进程假死排查记录


    排查过程

    我最近在跑一个项目,其中某一个Java进程跑着跑着就假死了,后台接口请求总是会无响应超时。于是乎,我参考了java服务程序假死(进程存在但请求无响应)的几种原因这篇文章中的第二点,进行排查。

    1. java线程出现死锁,或所有线程被阻塞;(我没有看到线程全部阻塞)
      图一
    2. 数据库连接池中的连接耗尽,导致获取数据库连接时永久等待;mybatis超时时间是默认的。
    3. 出现了内存泄漏导致了OutOfMemory,内存空间不足导致分配内存空间持续失败;服务器的可用内存足够,但是分配给jvm的内存被耗尽的情况,容易出现这种情况;(内存好像也足够,不过老年代占比好像有90%多)。
      图二
    4. 服务程序运行过程中替换了jar包,但是没有进行重启服务,这属于不按规则操作引起的问题;(没有操作)
    5. 磁盘空间满,导致需要写数据的地方全部失败;(磁盘充足)
    6. 线程池满,无法分配更多的线程来处理请求,通常是因为线程被大量阻塞在某个请求上;

    以下是网友给出的一些思路

    一、JVisualVM分析

    1. 从第一张线程的图中,并没有看出线程有啥问题,但是从图二中可见老年代的MinorGC消耗1秒太久了。
    2. 放大图二,会看到老年代在每次MinorGC之后都会增长。给出的猜测是Servivor区太小,由于内存担保机制,导致MinorGC把大量生命周期短的对象拷贝到老年代中,从而老年代越来越大无法被FullGC导致的假死问题。
      在这里插入图片描述
      不过后来我在假死之前查看GC情况发现,其中年轻代MinorGC非常的频繁,而且GC时间很久,我的猜测是Servivor区太小导致的。
      在这里插入图片描述

    二 导出堆Dump文件,分析内存

    内存占用的比较多,新时代、老年代的占比高。需要排查一下内存溢出、死锁啥的。
    导出堆Dump文件:jmap -dump:format=b,file=path/test.hprof pid
    然后使用JVisualVM打开这个文件。可以看到哪些类占用了比较多的堆内存。
    在这里插入图片描述

    jvm启动参数设置OOM异常时,自动生成dump文件

    -XX:+HeapDumpOnOutOfMemoryError 设置当首次遭遇内存溢出时导出此时堆中相关信息
    -XX:HeapDumpPath=/tmp/heapdump.hprof 指定导出堆信息时的路径或文件名

    Visual GC 插件下载

    https://visualvm.github.io/pluginscenters.html
    在这里插入图片描述
    在这里插入图片描述

    一些其他的命令:

    1. jps 查看当前系统存在哪些正在运行的Java程序。
    2. jstack pid 了解Java进程中线程的运行情况。

    GC触发过程图

    在这里插入图片描述

    一些我参考的文档

    1. java生成hprof文件方式以及分析工具
    2. jstat指令官方文档
    3. JVM频繁GC分析
    4. JVM 调优/问题排查 浅谈
    5. 什么是 Minor GC/Major GC

    好了,写的可能没有逻辑,比较散乱。第一次尝试排查问题。还请大佬们、靓仔、小姐姐们多多指教!

  • 相关阅读:
    Matlab论文插图绘制模板第117期—气泡云图
    【损失函数:3】感知损失:Perceptual Loss、总变分损失(TV Loss)(附Pytorch实现)
    从“新零售”到“即时零售”看中国电商之变
    Linux的软件安装方式
    《500强高管谈VE》-新领域的VE及其成功的条件
    2020年华数杯数学建模A题带相变材料的低温防护服御寒仿真模拟求解全过程文档及程序
    RTSP 和 RTMP原理 & 通过ffmpeg实现将本地摄像头推流到RTSP服务器
    关于#Python#的问题,如何解决?(相关搜索:数据库)
    《uni-app》表单组件-Input组件
    001图机器学习与图神经网络简介
  • 原文地址:https://blog.csdn.net/qq_40366738/article/details/126091316
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号