• Java服务频繁挂掉,内存溢出


    项目场景:

    公司有一个服务,时常隔三岔五就挂掉。


    问题描述:

    实施反馈有一个服务,每隔两三天就会报502。之前的开发没处理,他们都是重启来解决这个问题的(因为用户少和这个服务不常用,所以这个问题就到了我手里)。

    原因分析:

    根据经验像是内存溢出


    解决方案:

    提示:
    查看内存:jstat -gc (进程号)
    YGC:新生代垃圾回收次数
    YGCT:新生代垃圾回收消耗时间
    FGC:老年代垃圾回收次数
    FGCT:老年代垃圾回收消耗时间
    GCT:垃圾回收消耗总时间
    这里没有看出什么异常

    在这里插入图片描述

    Memory Analyzerg:官网地址下载的时候注意选择中国的这个镜像,软件的教程可以去网上搜索下
    在这里插入图片描述

    保存堆快照文件命令
    jmap -dump:format=b,file=dump.txt 108122(进程号)

    拉到 Memory Analyzer (JVM Heap Dump分析工具)里看了下,也没看出什么问题
    以前遇到这样的情况,会有一个占用率特别多的地方。分析感觉应该是某一块代码,短时间导致内存溢出。

    在这里插入图片描述

    到了这里,我就去翻了一下。挂掉之前的日志文件,看看都执行了什么。日志文件上显示一条sql,在几秒内执行了上万次。好家伙,我找到那一块的代码一看stream的map()方法里面放了一个查询组织的方法(这个方法每次查询完会创建一个List)😢。我就把查询语句给抽离出了循环里面。

    我感觉它应该是在一瞬间把伊甸园区,和幸存区给占满了。正常情况下,应该不会遇到短时间创建这么多集合的。
    在这里插入图片描述

  • 相关阅读:
    万字长文保姆级教你制作自己的多功能QQ机器人
    PDCA方法论
    SQL数据定义语言(DDL)命令应用
    11. Junit
    git checkout 命令
    pytest框架
    [SWPUCTF 2018]SimplePHP
    朴素贝叶斯----评论情感分析系统
    正厚知识 | 超算“超”在何处
    Java解决new date出现的时区问题(差8小时)
  • 原文地址:https://blog.csdn.net/yang13676084606/article/details/126482979