Day04_JVM实战

文章目录

  • 一、gc日志和dump快照
    • GC日志是什么,要怎么看?
    • dump快照是什么?要怎么看?
  • 二、gc日志和dump快照实战
    • java.lang.OutOfMemoryError:Java heap space
      • 1、gc.log怎么看
      • 2、heapdump.hprof怎么看?
        • ①jvisualvm查看
        • ②使用MAT查看
    • java.lang.OutOfMemoryError:Metaspace
      • 1、实时分析—jstat
      • 2、实时分析—jvisualvm
      • 3、离线分析—gc.log
      • 4、离线分析—dump快照
    • java.lang.OutOfMemoryError:GC overhead limit
    • java.lang. stackoverflowError
  • 三、java命令行工具
      • jps
      • jstat
        • jstat -gc 10376 1000 10
        • jstat -gcutil 6384 1000 30
        • -t参数分析垃圾回收的时间占比
        • jstat还可以用来判断是否出现内存泄漏。
      • jinfo
        • jinfo -flags xxx
      • jmap
        • jmap -dump 导出堆内存日志
        • jmap -heap xxx 显示堆内存信息
        • jmap histo xxx 显示
      • jhat
      • jstack
        • jstack pid 线程诊断
      • jcmd
  • 四、面试必问(异常类)
      • 内存泄露和内存溢出的关系?
      • 内存泄露的几种情况
      • JVMOOM问题如何排查和解决?
      • java.lang.OutOfMemoryError: Java heap space堆内存溢出问题如何排查和解决?
      • 如果JVM出现频繁FullGC该如何解决
      • 我实际遇到的内存泄露:
      • 线上OOM、CPU预警、内存预警问题排查的步骤?(宏观谈)
      • OOM、CPU预警、内存预警之类的问题具体排查步骤:
          • 第一步:查看硬件的资源
          • 第二步、使用实时分析工具
          • 第三步,离线分析
      • 线上的 API 接口响应比较慢,该如何快速排查和定位问题?
      • 线程诊断_CPU占用过高
      • 线程诊断_迟迟得不到结果
      • MySQL 数据库cpu 飙升的话,要怎么处理呢?
      • 数据库出现死锁如何排查?
  • 五、面试必学(调优类)
      • GC 调优
      • 如何进行GC调优?
          • 1. 新生代调优
          • 2. 幸存区调优
          • 3. 老年代调优
      • GC调优的案例
  • 六、JVM性能优化案例
      • 案例1:调整堆大小提高服务的吞吐量
      • 案例2:如何调整堆内存?/ 生产环境该给服务器分配多少内存?
      • 案例3:调整垃圾回收器,提高服务吞吐量
      • 案例4:服务器升级后为什么卡顿十分严重?

一、gc日志和dump快照

当服务发生堆内存溢出时,你可以从系统里面拿到两类日志:一个是gc日志,另一个是dump快照
gc日志可以直接看(不推荐),但是直接看晦涩难懂,建议用GCEasy去分析
dump快照是二进制文件,你想直接看也看不懂,所以你需要借助JvisualVm、MAT、Jprofile等专业工具分析
上面都是离线分析。

我们可以用JvisualVm、MAT、Jprofile连上我们的idea进行实时监控堆内存然后实时分析,但是这个在生产环境中不适用;
生产环境发生堆内存溢出时我们拿到gc日志和dump快照然后进行离线分析;
也就是说,对于dump快照和gc日志而言,我们生产环境主打的就是离线分析。

jinfo、jstat、jmap这些命令行工具有啥用?我们能用JvisualVm、MAT、Jprofile去图像分析,那为啥要学这些命令行?
JvisualVm、MAT、Jprofile是分析dump快照的,但是我如果想知道①生产环境堆内存大小是多少?②生产环境老年代使用了多少了?是否快发生堆内存溢出了?③生产环境出现死锁了④生产环境cpu过高 等等问题,你是只能用命令行去解决的

GC日志是什么,要怎么看?

添加如下的启动参数-XX:+PrintGCDetails -XX:+PrintGCDataStamps -XLoggc:./logs/gc.log

-XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配的情况
-XX:+PrintGCDataStamps GC发生时输出时间戳
-XLoggc:./logs/gc.log 把GC日志写入到一个文件里面去

这里是引用

上面的gc.log可以到GcEasy官网去分析

Minor GC日志该怎么看?(了解)
以下内容来自别的视频

这里是引用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Full GC日志该怎么看?(了解)
以下内容来自别的视频

Full GC由于包括了新生代、老年代、元空间等,所以它的日志很长

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

dump快照是什么?要怎么看?

dump快照是二进制文件,你想直接看也看不懂,所以你需要借助JvisualVm、MAT、Jprofile等专业工具分析

Jconsole
略,这个工具不如JvisualVm、MAT、Jprofile

JvisualVM

JvisualVM怎么分析我们后面慢慢讲,我们先说一下它怎么安装插件

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MAT
MAT可以分析heap dump文件。在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就可以直观地看到当前的内存信息。

面试问答:MAT里面能看到哪些内存信息?

  • 所有的对象信息,包括对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的
    引用值。
  • 所有的类信息,包括classloader、类名称、父类、静态变量等.
  • GCRoot到所有的这些对象的引用路径
  • 线程信息,包括线程的调用栈及此线程的线程局部变量(TLS)

Jprofile
Jprofile是收费的,所以Jprofile更强大,它支持实时分析正在运行的程序,也支持离线对dump文件的分析

这个工具就先不介绍了,老师课程里面都是实时分析,但是我们真实生产环境要的是离线分析,而且JvisualVm、MAT使用的更多一些

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其它工具

还有JMC、Flame Graphs 、Tprofiler 、 Btrace 、YouKit、JProbe、Spring Insight等工具

二、gc日志和dump快照实战

对于gc日志和dump快照怎么看,我们必须依赖案例来去了解JvisualVm、MAT、GCEasy这些工具的使用,离开案例都是耍流氓。

java.lang.OutOfMemoryError:Java heap space

jvm参数配置:

-Xms50M -Xmx50M -XX:MetaspaceSize=64M
-XX:+PrintGCDetails -XX:+PrintGCDataStamps -XLoggc:./logs/gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=heap/heapdump.hprof-Xms50M -Xmx50M 这两个参数保证你的堆内存足够小能够发生堆内存溢出
-XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配的情况
-XX:+PrintGCDataStamps GC发生时输出时间戳
-XLoggc:./logs/gc.log 把GC日志写入到一个文件里面去,方便后面分析
-XX:+HeapDumpOnOutOfMemoryError 保证当服务器出现堆内存溢出时能够把当前的堆使用情况记录下来(这个很关键,你要是没有这个参数就不会记录当时的堆内存情况。这就好比是一个人被杀了,临死之前拍了一段录像一样。)
-XX:HeapDumpPath=heap/heapdump.hprof 保证当服务器出现堆内存溢出时能够把当前的堆使用情况记录到heap目录下的heapdump.hprof 文件中(这就好比是一个人被杀了,临死之前拍了一段录像,然后把录像放到某个柜子里)

这里是引用
在这里插入图片描述

经过上面堆内存参数的配置,发生堆内存溢出后你本地会有两个文件gc.log和heapdump.hprof
gc.log记录了gc情况,可以到GcEasy官网去分析
heapdump.hprof记录了堆内存情况,借助jvisualvm工具或MAT工具分析

1、gc.log怎么看

gc.log怎么看?

在这里插入图片描述
在这里插入图片描述

GcEasy

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面为其它视频讲解的内容

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其它GC日志分析的工具
GCViewer

这里是引用
在这里插入图片描述

还有GChisto

2、heapdump.hprof怎么看?

①jvisualvm查看

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


备注:下面的截图来自另一个视频这里是引用> 在这里插入图片描述

②使用MAT查看

MAT是Eclipse自带的工具,可以单独安装,而且MAT是专门做堆内存分析的,功能比JvisualVM更强大

说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


备注:下面的图来自其它视频
在这里插入图片描述

这里是引用

Histogram直方图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
内存泄露情景之一:有些对象生命周期本身没有必要那么长,但是由于外面有对象引用它了,导致它迟迟不能回收
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

thread overview
thread overview可以查看系统中的所有的Java线程,也可以查看到线程里面局部变量的信息
线程对应一个独立的栈,栈里面保存着栈帧(局部变量)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

支配数

这里是引用
在这里插入图片描述

概览

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

OQL语句

在这里插入图片描述
在这里插入图片描述

java.lang.OutOfMemoryError:Metaspace

这段代码是个死循环,期间它创建了大量代理类导致方法区被撑爆,而你元空间内存设置的过小-XX:MetaspaceSize=60m -XX:MaxMetaspaceSize=60m

这里是引用

1、实时分析—jstat

因为代码是死循环所以一直在运行,上面代码程序运行时,你可以使用jstat分析

在这里插入图片描述

jstat -gc 10376是查看当前进程gc的信息,jstat -gc 10376 1000 10是每1000ms(每1秒)打印一次,一共打印10次

在这里插入图片描述
在这里插入图片描述

可以看到,FullGC非常频繁,而且我们的方法区,占用了58729KB/1024= 57.8M空间,你JVM参数里面方法区设置的是60M,几乎把整个方法区空间占用,所以得出的结论是方法区空间设置过小,或者存在大量由于反射生成的代理类。

2、实时分析—jvisualvm

因为代码是死循环所以一直在运行,上面代码程序运行时,你可以使用jvisualvm分析

在这里插入图片描述

3、离线分析—gc.log

因为你加了-XX:+PrintGCDetails -XX:+PrintGCDataStamps -XLoggc:./logs/gc.log这些jvm参数,所以-XLoggc:./logs/gc.log 把GC日志写入到一个文件里面去,你查看这个文件可以看到频繁发生Full GC

在这里插入图片描述

使用GcEasy查看这个gc.log

在这里插入图片描述

4、离线分析—dump快照

因为你加了-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap/heapdumpMeta.hprof这些jvm参数,所以你可以分析生成的dump文件

-XX:+HeapDumpOnOutOfMemoryError 保证当服务器出现堆内存溢出时能够把当前的堆使用情况记录下来(这个很关键,你要是没有这个参数就不会记录当时的堆内存情况。这就好比是一个人被杀了,临死之前拍了一段录像一样。&#x

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

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

相关文章

hive-拉链表

目录 拉链表概述缓慢变化维拉链表定义 拉链表的实现常规拉链表历史数据每日新增数据历史数据与新增数据的合并 分区拉链表 拉链表概述 缓慢变化维 通常我们用一张维度表来维护维度信息,比如用户手机号码信息。然而随着时间的变化,某些用户信息会发生改…

[OPEN SQL] SELECT语句

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 1.SELECT语句 SELECT语句从数据库表中读取必要的数据 1.1 读取一行数据 语法格式 SELECT SINGLE <cols>... WHERE cols&#xff1a;数据库表的字段 从数据库表中读取一条数据可使…

ETLCloud:新一代ETL数据抽取工具的定义与革新

数据集成、数据治理已经成为推动企业数字化转型的核心动力&#xff0c;现在的企业比任何时候都需要一个更为强大的新一代数据集成工具来处理、整合并转化多种数据源。 而ETL&#xff08;数据提取、转换、加载&#xff09;作为数据管理的关键步骤&#xff0c;已在企业数据架构中…

SMS over IP原理

目录 1. 短消息业务的实现方式 2. 传统 CS 短消息业务中的发送与送达报告 3. MAP/CAP 信令常见消息 4. SMS over IP 特点概述 5. SMS over IP 中的主要流程 5.1 短消息注册流程(NR 或 LTE 接入) 5.2 短消息发送(MO)流程(NR 或 LTE 接入) 5.3 短消息接收(MT)流程(NR 或…

如何在磁盘清理后恢复误删除的照片

如果您在运行磁盘清理后丢失了照片&#xff0c;请不要担心&#xff0c;我们会为您提供支持。这篇文章解释了如何在 奇客数据恢复软件的帮助下运行磁盘清理实用程序后恢复丢失或删除的照片。 每个人一生中都会成为意外删除重要照片、视频或音频文件的受害者。令人惊讶的是&…

【线程】线程的控制

本文重点&#xff1a;理解线程控制的接口 前言 内核中是没有很明确线程的概念的&#xff0c;只有轻量级进程的概念&#xff0c;不会提供直接给我们线程的系统调用&#xff0c;而会给我们提供轻量级进程的系统调用。我们用户是需要线程的接口的&#xff0c;在应用层&#xff0…

【机器学习】12-决策树1——概念、特征选择

机器学习10-决策树1 学习样本的特征&#xff0c;将样本划分到不同的类别&#xff08;分类问题&#xff09;或预测连续的数值&#xff08;回归问题&#xff09;。 选择特征&#xff0c;划分数据集&#xff0c;划分完成形成模型&#xff08;树结构&#xff09;&#xff0c;一个…

仿真软件PROTEUS DESIGN SUITE遇到的一些问题

仿真软件PROTEUS DESIGN SUITE遇到的一些问题 软件网上有很多下载地址自己找哈! 首先如果遇到仿真 没有库 ,需要在网上下载库文件替换到DATA目录下 如果不是默认安装到C盘需要手动修改这些地址,不然会报错!! 当遇到点击仿真出现报错 : 检查这个设置地址是否正确: 随便在库文…

物理学基础精解【7】

文章目录 平面方程直角坐标及基本运算线段的定比分点一、定义二、坐标公式三、特殊情况四、应用举例五、推导过程&#xff08;简要&#xff09;两直线的交点和两曲线的交点两直线的交点两曲线的交点例题&#xff1a;求两直线的交点例题&#xff1a;求两曲线的交点 参考文献 平面…

IPsec-VPN中文解释

一 IPsec-VPN 实操 (点到点) 网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 //配置IP地址 [FW1000-A]interface GigabitEthernet 1/0/2 [FW10…

Windows安全日志分析(事件ID详解)

目录 如何查看Windows安全日志 常见事件ID列表 事件ID 1116 - 防病毒软件检测到恶意软件 事件ID 4624 - 账户登录成功 事件ID 4625 - 账户登录失败 事件ID 4672 - 为新登录分配特殊权限 事件ID 4688 - 新进程创建 事件ID 4689 - 进程终止 事件ID 4720 - 用户账户创建 …

力扣206.反转链表

力扣《反转链表》系列文章目录 刷题次序&#xff0c;由易到难&#xff0c;一次刷通&#xff01;&#xff01;&#xff01; 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段 题解224. 两两交换链表中的节点两个一组反转链表 题解325. K 个一组翻转…

【Go】Go语言切片(Slice)深度剖析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Geo.__init__() got an unexpected keyword argument ‘title_color‘

把pyecharts从0.5版升级以后&#xff0c;报错如下&#xff1a; lmportError: cannot import name Geo from pyecharts‘ 参考这个&#xff1a;python画图时&#xff0c;from pyecharts import Geo时出错_cannot import name geo from pyecharts-CSDN博客 改成&#xff1a; fr…

yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9/10模型在VOC数据集上的应用【代码数据集python环境GUI系统】 1.背景意义 VOC数据集被广泛应用于计算机视觉领域的研究和实验中&#xff0c;特别是目标检测和图像识别任务。许多知名的目标检测算法都使用VOC数据集进行训练和测试。VOC挑战赛&#xff08;VOC Challeng…

Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)

检索原理 自动合并检索 自动合并检索原理&#xff0c;和我的上一篇文章的检索方案&#xff1a; 将文本分割成512大小&#xff08;一般对应段落大小&#xff09;和128&#xff08;一般对句子大小不是严格的句子长度&#xff09;大小两种分别存储到索引库&#xff0c;再用llama_…

NoSql数据库Redis知识点

数据库的分类 关系型数据库 &#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQL 数据库 &#xff0c;全称为 Not Only SQL &a…

[uni-app]小兔鲜-01项目起步

项目介绍 效果演示 技术架构 创建项目 HBuilderX创建 下载HBuilderX编辑器 HBuilderX/创建项目: 选择模板/选择Vue版本/创建 安装插件: 工具/插件安装/uni-app(Vue3)编译器 vue代码不能直接运行在小程序环境, 编译插件帮助我们进行代码转换 绑定微信开发者工具: 指定微信开…

2024年最新前端工程师 TypeScript 基础知识点详细教程(更新中)

1. TypeScript 概述 TypeScript 是由微软开发的、基于 JavaScript 的一种强类型编程语言。它是在 JavaScript 的基础上添加了静态类型检查、面向对象编程等功能的超集&#xff0c;最终会被编译为纯 JavaScript 代码。由于其扩展了 JavaScript 的功能&#xff0c;TypeScript 特…

解锁亚马逊测评自养号防关联新技术

解锁亚马逊测评自养号防关联的新技术主要包括以下几个方面&#xff0c;这些技术旨在提高测评过程的安全性&#xff0c;降低账号被关联的风险&#xff1a; 1. 独立纯净IP技术 独立纯净IP&#xff1a;采用独立、纯净且未受污染的国外IP地址&#xff0c;确保这些IP未被标记或列入…