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…

CAPL入门到精通之CAPL Functions(五) 数学函数

Vector CANoe CAPL系列相关文章导览,下面链接可直接跳转 CAPL入门到精通文章导览Vector CANoe VT System系列板卡文章导览,下面链接可直接跳转 Vector CANoe VT system传送门文章目录 Genreal Functions & Event ProceduresGeneral FunctionsTrigonometric and Mathemati…

Matlab矩阵嵌套

在MATLAB中&#xff0c;可以使用嵌套矩阵来表示多维数据结构。 嵌套矩阵是指一个矩阵中的元素本身也可以是矩阵。这种嵌套的结构可以创建多层的数据结构&#xff0c;非常灵活。 例如&#xff0c;下面是一个简单的嵌套矩阵的例子&#xff1a; A [1 2; 3 4]; B [5 6; 7 8]; …

收录一些可能面试用的算法题

收录一些又长又臭,还可能要手写的模板算法题&#xff08;说的就是你快排) 1.快速排序 public class QuickSort {public static void quickSort(int[] nums, int low, int high) {if (low < high) {int pivotIndex partition(nums, low, high);quickSort(nums, low, pivot…

入门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:…

中国硝酸异辛酯行业调研与投资预测报告(2024版)

内容介绍&#xff1a; 硝酸异辛酯是一种常用的柴油添加剂&#xff0c;用于改进柴油的十六烷值&#xff0c;其分子式为&#xff08;C8H17O&#xff09;NO2&#xff0c;外观为无色&#xff08;或淡黄色&#xff09;透明液体。 十六烷值是衡量柴油着火性能和抗爆性能的指标。一般…

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 提示对齐分数抽…

K8s面试题——基础篇1

文章目录 一、简述etcd及其特点二、简述 etcd 适应的场景三、简述什么是 Kubernetes四、简述 Kubernetes 和 Docker 的关系五、简述 Kubernetes 中什么是 Minikube、Kubectl、Kubelet六、简述 Kubernetes 常见的部署方式七、简述 Kubernetes 如何实现集群管理八、简述 Kubernet…

SDKJ_NAV《docker部署》

SDKJ_NAV《docker部署》 1. 下载ubuntu/nginx镜像&#xff0c;并创建容器2.基础环境配置3. 配置nginx&#xff08;前端站点&#xff09;4. 配置python环境&#xff08;后端环境&#xff09;5. 配置mongodb5. 配置 redis 1. 下载ubuntu/nginx镜像&#xff0c;并创建容器 1.官网…

报表生成器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;多媒…

SpringBoot教程(八) | SpringBoot统一结果封装

SpringBoot教程(八) | SpringBoot统一结果封装 经过了前面几篇文章&#xff0c;SpringBoot中MVC相关的配置其实都已经差不多了&#xff0c;接下来就可以完全进入接口开发阶段了。前面我们写过几个接口&#xff0c;虽然都加了RestController注解&#xff0c;相当于统一了我们的…

APP加固原理与作用

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