首页 > 其他分享 >频繁full gc 如何排查

频繁full gc 如何排查

时间:2024-10-09 23:11:27浏览次数:14  
标签:full 排查 GC 内存 JVM gc 日志

频繁full gc 通常表明应用程序在内存管理方面存在问题,可能导致性能下降,下面是排查步骤和一个详细的示例

排查步骤

  • 收集GC日志

首先,需要开启详细的GC日志,在JVM参数中添加

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log
  • 分析GC日志

使用工具 GCViewer 分析GC日志,可以发现

  1. fullgc 频率
  2. 每次fullgc 耗时
  3. old gen使用情况,每次GC后仍然回收不掉
  • 监控JVM内存使用情况

使用工具如 jvisualvm 监控jvm 内存使用

  1. eden区,频繁被填满后触发 minor gc
  2. Survivor 区:经常满载
  3. Old Gen 持续增长,即使 full gc 也难以下降。
  • 分析堆内存

使用 jmap 生成 堆存储文件:

jmap -dump:format=b,file=heap_dump.hprof <pid>

使用jvisualvm 分析堆转储

  • 检查代码中的内存使用

  • 调整JVM 参数

临时调整 jvm 参数以缓解问题

-Xms4g -Xmx4g -XX:NewRatio=2 -XX:SurvivorRatio=8
  • 优化代码

  • 验证改进

  • 总结

  1. 使用GC日志和监控工具识别问题
  2. 通过堆内存分析找到内存泄漏的根源
  3. 优化代码内存的使用模式
  4. 调整JVM参数以更好适应应用特性

标签:full,排查,GC,内存,JVM,gc,日志
From: https://www.cnblogs.com/yg_zhang/p/18455381

相关文章

  • 『板刷 AGC』[AGC016] A~E 做题记录
    远古的一场AGC,能够把前四题做出来,后面两个看了题解还是只会E,F是最近才拉过的一道题,但我不会,没办法我还是太菜了。。A:Shrinking人机签到题。先枚举我们最终保留的字符\(c\),然后我们就按照题意模拟一边,每次从\(s\)更新到新的字符串\(s'\)的时候,我们希望得到的\(s'\)......
  • Jvisualvm介绍;使用Jvisualvm:运行jvisualvm.exe;安装gc插件;查看gc
    一,Jvisualvm介绍jvisualvm是用来查看硬件使用情况的工具,多数会用它来看内存的使用情况VisualVM是Netbeans的profile子项目,已在JDK6.0update7中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对......
  • 【AIGC】通过OpenAi Canvas修改论文(附40条论文优化指令)
    目录1、用ChatGPT优化论文大纲和逻辑2、用ChatGPT充实论文内容3、用ChatGPT寻找案例和数据4、用ChatGPT检查语法和字词错误5、如何直接使用ChatGPT4o、o1、OpenAICanvas6、OpenAICanvas增强了啥?7、编程功能增强在刚开始撰写学术论文时,很多小伙伴感觉无从下手,使用......
  • 【Linux】yum、vim、gcc/g++
    文章目录1.Linux软件管理包yum什么是软件包rzsz查看软件包如何安装软件如何卸载软件Linux开发工具2.Linux编译器vimvim的基本概念vim的基本操作3.Linux编译器gcc/g++背景知识在这里涉及到一个重要的概念:函数库函数库一般分为静态库和动态库两种。gcc选项1.Linux软......
  • [AGC064D] Red and Blue Chips 题解
    Description你有\(N\)个字符串,初始情况下每个字符串只有一个字符,是\(\texttt{R}\)或\(\texttt{B}\),保证第\(N\)个字符串是\(\texttt{B}\)。你需要对每个\(i=1,2,\cdots,n-1\)执行以下操作:选择一个整数\(j\)使得\(i<j\len\),且第\(j\)个字符串的最后一个字符......