news 2026/6/10 12:19:00

JVM 内存溢出和死锁检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JVM 内存溢出和死锁检测

内存溢出案例

案例环境

案例代码

package com.hero.jvm.memory;importjava.util.ArrayList;importjava.util.List;importjava.util.UUID;public class TestJvmOutOfMemory{public static void main(String[]args){List<Object>list=new ArrayList<>();for(int i=0;i<10000000;i++){String str="";for(int j=0;j<1000;j++){str+=UUID.randomUUID().toString();}list.add(str);}System.out.println("ok");}}

JVM 参数

  1. 让案例尽快 OOM
  2. 开启发生 OOM 时自动 dump 堆快照
#参数如下:-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

执行结果

溢出打印

java.lang.OutOfMemoryError: Java heap space Dumping heap to java_pid31092.hprof... Heap dumpfilecreated[8453096bytesin0.031secs]Exceptioninthread"main"java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332)at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)at java.lang.StringBuilder.append(StringBuilder.java:136)at com.hero.TestJvmOutOfMemory.main(TestJvmOutOfMemory.java:13)

dump 了堆快照文件

导入 MAT 分析

可以看到,有81.72%的内存由Object[]数组占有,所以比较可疑。

分析:这个可疑是正确的,因为已经有超过80%的内存都被它占有,这是非常有可能出现内存溢出的。

直接看对象详情

死锁检测

如果在生产环境发生了死锁,我们将看到的是部署的程序没有任何反应了,这个时候我们可以借助jstack进行分析,下面我们实战下查找死锁的原因。

案例环境

publicclassTestDeadLock{privatestaticObjectobj1=newObject();privatestaticObjectobj2=newObject();publicstaticvoidmain(String[]args){newThread(newThread1()).start();//启动线程01newThread(newThread2()).start();//启动线程02}//线程01privatestaticclassThread1implementsRunnable{@Overridepublicvoidrun(){synchronized(obj1){System.out.println("Thread1 拿到了 obj1 的锁!");try{// 停顿2秒的意义在于,让Thread2线程拿到obj2的锁Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}synchronized(obj2){System.out.println("Thread1 拿到了 obj2 的锁!");}}}}//线程02privatestaticclassThread2implementsRunnable{@Overridepublicvoidrun(){synchronized(obj2){System.out.println("Thread2 拿到了 obj2 的锁!");try{// 停顿2秒的意义在于,让Thread1线程拿到obj1的锁Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}synchronized(obj1){System.out.println("Thread2 拿到了 obj1 的锁!");}}}}}

使用 Jstack 分析

命令:jstack 18487 | grep ‘BLOCKED’ -A 15 --color

发现两个互相等待锁的线程

使用 Arthas 分析死锁

thread-b 命令

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 12:59:27

亲测好用8个AI论文软件,本科生搞定毕业论文不求人!

亲测好用8个AI论文软件&#xff0c;本科生搞定毕业论文不求人&#xff01; 1.「千笔」—— 一站式学术支持“专家”&#xff0c;从初稿到降重一步到位&#xff08;推荐指数&#xff1a;★★★★★&#xff09; 在众多AI论文工具中&#xff0c;「千笔」凭借其强大的论文生成能力…

作者头像 李华
网站建设 2026/5/14 10:51:12

上海交大突破:单一AI模型实现全视觉创作任务

这项由上海交通大学的陈俊逸、何通等研究者与快手科技Kling团队、南洋理工大学合作完成的研究发表于2026年1月&#xff0c;论文编号为arXiv:2601.02358v1。对于想要深入了解技术细节的读者&#xff0c;可以通过这个编号在学术数据库中查询完整论文。在当今的AI时代&#xff0c;…

作者头像 李华
网站建设 2026/6/10 12:12:16

《AI智脉速递》2026 年 1月1日 - 1月8日

Intel 炸场 CES&#xff01;首款 18A 制程处理器碾压上代&#xff0c;AI 算力狂飙 180TOPS 1 月 8 日 CES 2026&#xff0c;Intel 发布首款 18A 制程消费级处理器 Panther Lake&#xff0c;集成 RibbonFET 全环绕栅极与 PowerVia 背面供电技术&#xff0c;漏电率降低 30%。其 X…

作者头像 李华
网站建设 2026/6/10 12:10:37

交通仿真软件:Aimsun_(21).交通仿真中的数据分析

交通仿真中的数据分析 数据导入与预处理 在交通仿真软件Aimsun中&#xff0c;数据的导入与预处理是进行仿真分析的第一步。这一部分将详细介绍如何从各种数据源导入数据&#xff0c;并进行必要的预处理&#xff0c;以便在仿真模型中使用。 1. 数据源概述 Aimsun支持多种数据源&…

作者头像 李华
网站建设 2026/6/10 10:43:58

交通仿真软件:Paramics_(4).网络创建与编辑

网络创建与编辑 1. 网络创建的基本步骤 在交通仿真软件Paramics中&#xff0c;网络创建是仿真过程的基础。一个准确的交通网络模型能够帮助仿真器更真实地反映交通状况。以下是网络创建的基本步骤&#xff1a; 1.1 导入基础地图启动Paramics软件&#xff1a;首先&#xff0c;打…

作者头像 李华