Java线上问题堆栈排查分析

最近线上出现类似内存溢出问题,需要排查具体原因,记录过程,方便备查。

一、数据抓取

在启动参数中添加参数,可参照以下设置。
参数的作用是在程序发生内存溢出 OutOfMemory 时打印日志,dump下来,方便用工具分析溢出情况。

-Xloggc:/home/logs/ 
-XX:NumberOfGCLogFiles=8 
-XX:+PrintGCDateStamps 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:+UseGCLogFileRotation 
-XX:GCLogFileSize=600m 
-XX:HeapDumpPath=/home/logs/ 
-XX:+PrintGC

明确两个命令:jmap 和 dump
jmap 是 Java 的一个命令行工具,用于打印有关 Java 堆的信息,包括不同代的大小、总堆的大小以及不同对象使用的内存量。
dump命令是一个备份文件系统的工具。它可用于创建文件系统的镜像,以便在物理设备或远程存储中进行恢复。手动dump

在Linux系统手动抓取Java栈堆记录信息,命令如下图所示。

jamp -dump:format=b,file=/dump.hprof

或者可以写个bash脚本,可循环抓取。

#! /bin/bash
read -p 'input process id' process_id
for((i=1;i<=10;i++))
do
jamp -dump:format=b,file=/dump$i.hprof $process_id
sleep 10
done
二、记录设置参数过程

1)FullGC 瞬时次数
在未指定GC算法时,用监控软件发现出现 FullGC现象,瞬时值次数达到12次。
在这里插入图片描述

指定G1算法,即useG1,FullGC现象消失。
在这里插入图片描述

可在JVM参数中指定G1,参数如下所示。

-XX:+UseG1GC

2)调整栈大小
Jvm 默认栈大小为1m,可根据实际需要调整大小,本次调整栈大小为2m,可参考以下命令。

-Xss2m
三、JVM分析工具分析

对采集到的文件,进行JVM分析主要有两个工具 Java VisualVMEclipse Memory Analyzer

在cmd下输入jvisualvm命令,可以调用出 jvisualvm 界面。
在这里插入图片描述
在弹出页面 选择hprof文件即可。
在这里插入图片描述
打开界面如下所示,可以看到堆栈中主要占用情况,点击可查看详情。
在这里插入图片描述
方式一、mat 软件安装
下载地址:Eclipse Memory Analyzer官网,下载页面如下图所示。
在这里插入图片描述
根据实际需要选择对应的版本,这里选择的是Windows版本,进入下一步,选择 Download 等待下载即可。
在这里插入图片描述
若镜像下载不下来,可以尝试第三方下载方式,如 mat下载。
软件下载完毕,在编辑栏 file 导入hprof 文件即可,如下图所示。
在这里插入图片描述
在 总览页面Overview 下展示总体情况,可点击 支配树 dominator tree
在这里插入图片描述
浅堆(Shallow Heap) 是指一个对象所消耗的内存。Retained Heap的大小为回收它时候能回收的heap大小,包括回收它能直接/间接引用到的对象大小的总和(不包括被GC Root直接间接引用的),从下图看出,本次是log4j日志占的比重较大。
在这里插入图片描述

方式二、 Mat插件
在eclipse的编辑栏 -> help -> Install New Software,如下图所示。
在这里插入图片描述
在弹出的页面输入 http://download.eclipse.org/mat/1.8/update-site/,如下图所示。
在这里插入图片描述
点击 ok 后,远程搜索,显示结果,勾选 Memory Analyzer for Eclipse IDE 即可。
在这里插入图片描述
点击next 后,直接等待安装即可。
在这里插入图片描述
插件的方式也可查看内存占用情况。

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

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

相关文章

leetcode 206翻转链表

题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 提示&#xff1a; 链表中节点的数目范围是 [0, 5000] -5000 < Node.val < 5000 解法&#xff1a; 思路 使用双指针&#xff0c;pre,定义当前指针cur&#xff0…

入门Docker1: 容器技术的基础

目录 服务器选型 虚拟机 基于主机(物理机或虚机)的多服务实例 基于容器的服务实例 Docker Docker三要素 Docker安装 Docker基本使用 基本操作 仓库镜像 容器 服务器选型 在选择服务器操作系统时&#xff0c; Windows 附带了许多您需要付费的功能。 Linux 是开放源代…

Could not find annotations-4.9.0.jar 异常

问题 org.gradle.internal.resolve.ArtifactNotFoundException: Could not find annotations-4.9.0.jar (com.github.bumptech.glide:annotations:4.9.0).原因 解决方式 repositories {google()//谷歌放前面jcenter()//放在谷歌后面}更换顺序后确实没问题了 参考文章 https:…

Python接口自动化测试项目实战

1.1 接口测试项目搭建 1.1.1 教育局招生管理系统部署 教育局招生管理系统是基于javamysql,下面介绍它的部署过程。 1.从我的网盘下载部署文件。 2.安装jdk以及配置环境变量。 点击 文件进行安装。 下一步下一步直接安装。 本人的安装路径是C:\Program Files\Java\jdk1.7.…

解决Vue 3 + Element Plus树形表格全选多选以及子节点勾选的问题

目录 前言 问题概述 解决方案 1. 创建树形表格 2. 实现全选功能 3. 实现多选功能 4. 实现子节点勾选 5. 实现父节点勾选 总结 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊解决Vue 3 Element Plus树形表格全选多选以及子节…

【MATLAB】EEMD+FFT+HHT组合算法

代码原理 EEMD&#xff08;经验模态分解&#xff09;FFT&#xff08;快速傅里叶变换&#xff09;HHT&#xff08;希尔伯特-黄变换&#xff09;组合算法是一种常用的信号处理和分析方法。这个组合算法包含了EEMD、FFT和HHT三个步骤&#xff0c;可以用于处理非线性和非平稳信号。…

小程序中使用微信同声传译插件实现语音识别、语音合成、文本翻译功能----语音识别(一)

官方文档链接&#xff1a;https://mp.weixin.qq.com/wxopen/plugindevdoc?appidwx069ba97219f66d99&token370941954&langzh_CN#- 要使用插件需要先在小程序管理后台的设置->第三方设置->插件管理中添加插件&#xff0c;目前该插件仅认证后的小程序。 语音识别…

了解Dubbo配置:优先级、重试和容错机制的秘密【五】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Dubbo配置&#xff1a;优先级、重试和容错机制的秘密【五】 前言Dubbo高级配置概述不同配置覆盖关系重试与容错处理机制负载均衡机制 前言 Dubbo作为一款强大的分布式服务框架&#xff0c;其高级…

(2024,分数蒸馏抽样,Delta 降噪分数,LoRA)PALP:文本到图像模型的提示对齐个性化

PALP: Prompt Aligned Personalization of Text-to-Image Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 4. 提示对齐方法 4.1 概述 4.2 个性化 4.3 提示对齐分数抽…

报表生成器FastReport .Net用户指南:数据源与“Data“窗口

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…

央视推荐的护眼灯是哪款?教育部认可护眼灯品牌

许多家长一般都会给孩子买上许多学习用品&#xff0c;比如现在一些学习桌椅、读写笔灯等等&#xff0c;配有蛮多的学习用具&#xff0c;但对孩子学习时用的护眼台灯很忽略&#xff0c;没有给孩子选好真正合格好用的护眼台灯&#xff0c;就容易让孩子的视觉形成偏差&#xff0c;…

Pixel手机进入工程模式、是否是Version版本?

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

APP加固原理与作用

文章目录 引言正文1. 什么是APP加固&#xff0c;加固原理是什么&#xff1f;2. 加固的作用是什么&#xff1f;加固后是否完全不会被破解&#xff1f;3. 如何提前规避加固新版本可能带来的风险&#xff1f;4. 付费加固与免费加固的区别是什么&#xff1f; 白嫖的混淆加密工具总结…

代码随想录刷题笔记(DAY11)

今日总结&#xff1a;继续准备期末&#xff0c;今天的算法题目比较简单&#xff0c;晚上看看能不能再整理一篇前端的笔记。 Day 11 01. 有效的括号&#xff08;No. 20&#xff09; 题目链接 代码随想录题解 1.1 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff…

Android-常用数据结构和控件

HashMap 的原理 HashMap 的内部可以看做数组链表的复合结构。数组被分为一个个的桶(bucket)。哈希值决定了键值对在数组中的寻址。具有相同哈希值的键值对会组成链表。需要注意的是当链表长度超过阈值(默认是8)的时候会触发树化&#xff0c;链表会变成树形结构。 把握HashMap的…

5 - 声明式事务

传统事务流程&#xff1a; Connection connection JdbcUtils.getConnection(); try {//1. 先设置事务不要自动提交connection.setAutoCommit(false);//2. 进行各种 crud//多个表的修改&#xff0c;添加 &#xff0c;删除select from 商品表 > 获取价格//修改用户余额updat…

“确定要在不复制其属性的情况下复制此文件?”解决方案(将U盘格式由FAT格式转换为NTFS格式)

文章目录 1.问题描述2.问题分析3.问题解决3.1 方法一3.2 方法二3.3 方法三 1.问题描述 从电脑上复制文件到U盘里会出现“确定要在不复制其属性的情况下复制此文件&#xff1f;”提示。 2.问题分析 如果这个文件在NTFS分区上&#xff0c;且存在特殊的安全属性。那么把它从NT…

请查收“链上天眼”2023年成绩单

1月10日是中国人民警察节&#xff0c;是一份责任&#xff0c;更一份安心&#xff0c;随着科技的发展&#xff0c;链上安全领域的技术与工具不断更新迭代&#xff0c;更加安全的Web3世界正在构建。 根据欧科云链安全团队统计&#xff0c;2023 年全球范围内利用虚拟货币进行诈骗…

Radzen Blazor Studio 脚手架框架解读

背景 组织管理管理准备使用Blazor这个工具实现&#xff0c;因为其有对应的 scaffold 脚手架&#xff0c;先构建数据库&#xff0c;然后通过向导&#xff0c;生成CRUD以及对应的接口&#xff0c;那么有必要看一下&#xff0c;其内部的代码结构是什么样的。 结构 接口层 有两类…

Python——for循环的嵌套

用Python坚持表白一百天&#xff0c;每天都送10朵花&#xff0c;一百天表白成功&#xff01; i1 for i in range(1,101):print(f"今天是表白的第{i}天&#xff0c;坚持ing")for j in range(1,11):print(f"送给你第{j}朵玫瑰花")print("小美我喜欢你&…