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

频繁full gc 如何排查

时间:2024-10-09 23:11:27浏览次数:9  
标签: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

相关文章

  • java 死锁问题排查
    排查过程1.识别死锁现象通常,死锁会表现为应用程序挂起,不响应用户请求或cpu使用率下降。2.收集线程转储当应用出现不响应时,可以使用以下方法收集线程转储:jstack-l进程ID>threaddump.txt3.分析线程转储从生成的线程转储寻找"deadlock"等相关信息。java会在发现死......
  • 线上问题排查思路
    1.问题确认与收集问题描述:明确问题的具体表现,比如系统慢,服务不可用,数据异常等影响范围:确定问题影响的用户群体,功能模块或服务时间点:确定问题发生的事件,是持续性还是间歇性环境信息:收集环境信息,服务器配置,jdk版本,应用版本等2.快速响应评估严重程度:根据影响范围和业务......
  • 『板刷 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的对......
  • AGC005 题解
    目录A-STringB-MinimumSumC-TreeRestoringA-STring用栈模拟一下即可,具体的,当栈顶出现形如ST时,将其弹出。#include<bits/stdc++.h>#definelllonglongusingnamespacestd;llRead(){ intsig=1; llnum=0; charc=getchar(); while(!isdigit(c))......
  • 【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\)个字符串的最后一个字符......
  • GCC编译器CFLAGS、LDFLAGS详解
    目录CFLAGSLDFLAGS在编译C/C++程序时,可以使用CFLAGS和LDFLAGS环境变量来设置编译器和链接器的选项。下面对CFLAGS和LDFLAGS进行详解:CFLAGSCFLAGS是用于设置C/C++编译器选项的环境变量。它可以用来指定编译过程中的各种选项,如优化级别、警告级别、头文件包含路......
  • Spring Cloud全解析:链路追踪之springCloudSleuth简介
    springCloudSleuth简介链路追踪?什么是链路追踪?就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,如各个服务节点的耗时、具体请求的服务器、各节点的请求状态等,主要是用于分布式系统进行问题定位SpringCloudSleuthSpringCloudSleuth是SpringCloud提供的......