【JVM】GC导致的性能问题排查与解决方案,日志、堆分析工具介绍

一、必要性

重要应用程序在使用过程中,忽然无法响应用户请求,排查发现网络联通无问题,gateway能够正常接收分发请求,应用进程正常,正常向注册中心发送请求,但是接收http请求全部返回报错。
添加gc后发现内存回收耗时太长,无法恢复。

二、定位问题

  1. 确定网络请求无问题。
  2. 进程正常。
  3. 打印gc报错信息,确定是否为gc回收问题。

2.1 gc回收问题定位

  1. 先查询本应用的内存使用情况:

jps -l 查询正在运行的所有应用
确认出问题应用的内存使用情况
top -p <PID> 在top界面中,你可以看到包括RES(常驻集大小,即进程当前使用的、未交换出的物理内存大小)和%MEM(进程使用的物理内存百分比)在内的内存相关统计信息。
jmap -heap pid 查看堆使用情况
jstat -gc pid 1000相隔一秒输出一次内存使用情况

  1. 查看较长时间的gc情况需要在启动文件中新增参数

GC_PRINT=“-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintReferenceGC -Xloggc:./gclog/$APP_NAME-gc-%t.log”

GC日志输出参数

-XX:+PrintGC输出GC日志
-XX:+PrintGCDetails输出GC的详细日志
-XX:+PrintGCTimeStamps输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC在进行GC的前后打印出堆的信息
-Xloggc:…/logs/gc.log日志文件的输出路径
  1. 堆使用情况
  • 已经出现问题后:jmap -dump:live,format=b,file=dump.hprof PID
    输出dump.hprof进行分析
  • 已重启解决,需要跟进问题,启动参数添加:
-XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=./gclog/$APP_NAME-gc-%t.log  -XX:+HeapDumpBeforeFullGC

参数解释:

参数解释
-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件
-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称
-XX:+HeapDumpBeforeFullGC当 JVM 执行 FullGC前
-XX:+HeapDumpAfterFullGC当 JVM 执行 FullGC后

三、gc工具

3.1 gc日志分析工具

  1. 在线分析工具https://gceasy.io/
    在这里插入图片描述
    GCEasy是一款在线的GC(垃圾收集)日志分析器,它可以用于分析JVM(Java虚拟机)的垃圾回收日志,提供可视化的分析结果和建议。GCEasy具有内置的智能功能,能够自动检测JVM和Android GC日志中的问题,并为之推荐解决方案(收费)。
  2. GCViewer是一个小工具,它可以可视化展示Sun / Oracle、IBM、HP和BEA的Java虚拟机生成的详细GC(垃圾收集)输出。这个工具可以支持多种格式的GC日志输入,包括G1、Parallel、CMS和Serial等,并且只需将日志文件拖放到主窗口,GCViewer就能自动识别并对其进行详细分析。此外,GCViewer还提供了详细的图表来展示GC活动,如不同代别的内存分配、GC事件的时间线、暂停时间分布等,使得用户能够迅速了解GC行为的特点和潜在问题。
    在这里插入图片描述
    没有gceasy好用,但是可以本地运行。

3.2 堆文件分析工具

  1. jdk自带的工具jhat
    进入到dump.hrof同目录下,执行命令
$ jhat heap.hprof
Reading from heap.hprof...
Dump file created Wed Mar 22 15:20:48 CST 2023
Snapshot read, resolving...
Resolving 1250401 objects...
Chasing references, expect 250 dots..........................................................................................................................................................................................................................................................
Eliminating duplicate references..........................................................................................................................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

运行成功后使用浏览器访问
在这里插入图片描述
不太好用,没有分析
2. Memory Analyzer Mat下载地址:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
注意需要jdk17以上才能使用,jdk下载
可以直接指定运行的JRE
修改MemoryAnalyzer.ini文件,添加

-vm
C:\Program Files\Java\jdk-22\bin\javaw.exe

如图所示
在这里插入图片描述

导入堆文件后的显示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#项目引用解决方案中其他项目dll时,出现黄色感叹号的解决方案

问题引入 今天拿着老师傅的老项目&#xff0c;需要做通讯调试&#xff0c;说测试一下&#xff0c;便添加了一个项目A来编写结构体&#xff0c;然后在窗体程序项目B中引用A&#xff0c;发现B一引用A&#xff0c;在B项目的引用下面A就多了个黄色感叹号&#xff0c;一编译B项目&am…

网工内推 | 上市公司网工,最高30K,思科认证优先,多次晋升机会

01 牧原股份 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责公司及下属子公司办公网络及IOT网络架构规划、设计、重大网络变更评审或实施及重大疑难问题处理&#xff1b; 2、负责公司网络运维监控体系、自动化网络运维及服务体系&#xff0c;并持续优化改进&am…

20240408在全志H3平台的Nano Pi NEO CORE开发板的eMMC刷Ubuntu Core 16.04

20240408在全志H3平台的Nano Pi NEO CORE开发板的eMMC刷Ubuntu Core 16.04 2024/4/8 20:46 参考资料&#xff1a; https://wiki.friendlyelec.com/wiki/index.php/NanoPi_NEO_Core/zh#.E5.AE.89.E8.A3.85.E7.B3.BB.E7.BB.9F [ OK ] Created slice Slice /system/getty. [ …

arm 的CoreLink 是什么?

ARM的CoreLink是一套由ARM公司开发的系统互连IP解决方案&#xff0c;旨在为片上系统&#xff08;SoC&#xff09;提供高性能和高效率的互连架构。CoreLink系列包括多种技术和组件&#xff0c;每个都针对特定的系统设计需求进行了优化。以下是CoreLink系列的一些关键组件及其使用…

代码随想录Day48

Day 48 动态规划part09 今日任务 198.打家劫舍213.打家劫舍II337.打家劫舍III 代码实现 基础打家劫舍 class Solution {public static int rob(int[] nums) {if (nums null || nums.length 0) return 0;if (nums.length 1) return nums[0];int[] dp new int[nums.leng…

获取淘宝销量API商品详情页原数据APP接口:测试key获取(含测试链接)

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地…

注入类型(一)

一、整数类型 1 and 11 # 1 or 11 -- 二、字符串类型 1 and 11 -- 1 and 11 # 三、搜素类型 搜索型注入&#xff0c;需要额外的考虑后面的问题 总结&#xff1a; 前闭合 " ) ") % %" 无 后闭合 " ( (" % …

百度松果菁英班——机器学习实践五:明星图片爬取

飞桨AI Studio星河社区-人工智能学习与实训社区 &#x1f96a;图片爬取 import requests import os import urllib ​ class GetImage():def __init__(self,keyword大雁,paginator1):# self.url: 链接头self.url http://image.baidu.com/search/acjson?self.headers {User…

Linux安装并配置Miniconda

miniconda官方文档&#xff1a; Miniconda — Anaconda 文档 官方文档中有讲到怎么安装Miniconda&#xff0c;如下&#xff1a; 以下是我得出的经验&#xff1a; 1. 新建新目录并下载和安装miniconda&#xff08;安装过程中&#xff0c;当提示是否继续时&#xff0c;一直按回…

蓝桥杯22年javaB组省赛真题

22年java_b组题目解析 写该博客既是为了分享题目解法&#xff0c;也是对之前写的题复习&#xff0c;毕竟已经24年了&#xff0c;写22年的题解 233&#x1f92d; 文章目录 22年java_b组题目解析A.星期计算(填空题)B.山&#xff08;填空题&#xff09;C.字符统计&#xff08;编…

day75 js 正则表达式 window对象轮播图片调用定时器

一 正则表达式: RegExp 对象: 对字符串执行模式匹配的强大工具。 1 创建正则表达式对象 let reg /模式/修饰符 修饰符 attributes 是一个可选的字符串&#xff0c;包含属性 "g"、"i" 和 "m"&#xff0c; …

Azure的VFP和虚拟IP地址

Azure 的Virtual filtering platform (VFP) 是Azure 网络地址转换,端口转换和端口分配的基础。 下面我们来深入介绍一下VFP的工作方式。 VFP的出站动作。 对于客户端地址作为虚拟IP的出站目的地址的时候,VFP 驱动会负责做以下两个动作。 源地址转换。端口地址转换。VFP 和 S…

20240325-1-HMM

HMM 直观理解 马尔可夫链&#xff08;英语&#xff1a;Markov chain&#xff09;&#xff0c;又称离散时间马尔可夫链&#xff08;discrete-time Markov chain&#xff0c;缩写为DTMC&#xff09;&#xff0c;因俄国数学家安德烈马尔可夫&#xff08;俄语&#xff1a;Андре…

【C++进阶】用哈希实现unordered_set和unordered_map的模拟

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 前言&#xff1a; 之前我…

H5移动端 Vue3 + vue-virtual-scroller 实现长列表性能优化

文章目录 安装 vue-virtual-scroller引入&#x1f4e2;注意事项使用基础使用上拉加载下拉刷新 移动端在渲染长列表时 大量dom节点的渲染和重绘重排会导致页面卡顿、滚动不流畅、设备耗电加快、影响移动设备电池寿命等性能问题 这里分享使用【虚拟滚动】方案进行长列表优化&…

【C++ STL算法】sort 排序

文章目录 【 1. 基本原理 】【 2. sort 的应用 】实例 - sort 函数实现 升序排序和降序排序 函数名用法sort (first, last)基于 快速排序&#xff0c;对容器或普通数组中 [ first, last ) 范围内的元素进行排序&#xff0c;默认进行升序排序&#xff08;从小到大&#xff09;。…

2024年面试AI编译器岗经验总结

面试经历: 面试中必备的知识: 1.用C++实现一个卷积 (图解)一步一步使用CPP实现深度学习中的卷积 - GiantPandaCVGiantPandaCVhttp://giantpandacv.com/academic/%E7%AE%97%E6%B3%95%E7%A7%91%E6%99%AE/%E5%B0%BD%E8%A7%88%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E…

Mac 下载 (FinallShell)

FinalShell 官网&#xff1a;FianlShell官网 FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 特色功能: 免费海外服务器远程桌面加速,ssh加速,本地化命令输入框,支持自动补全,命令历史,自定义命令参数 Win…

自然语言处理——计算编辑距离

编辑距离(Levenshtein距离)的概念和计算方法 编辑距离(Levenshtein距离)的概念和计算方法深入地探讨了字符串之间的差异和相似度。通过测量一个字符串变换成另一个字符串所需的最小单字符编辑操作次数,我们能够量化两个字符串之间的相似程度。编辑距离的核心在于识别和执…

git 常用命令和使用方法

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…