java内存溢出的问题如何排查

author author     2023-04-30     777

关键词:

java程序大家都知道,内存溢出是经常见的错误,下面从基本的开始分析!
内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,造成的内存溢出。如果出现这种现象可行代码排查:
一)是否App中的类中和引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str;
二)是否App中使用了大量的递归或无限递归(递归中用到了大量的建新的对象)
三)是否App中使用了大量循环或死循环(循环中用到了大量的新建的对象)
四)检查App中是否使用了向数据库查询所有记录的方法。即一次性全部查询的方法,如果数据量超过10万多条了,就可能会造成内存溢出。所以在查询时应采用“分页查询”。
五)检查是否有数组,List,Map中存放的是对象的引用而不是对象,因为这些引用会让对应的对象不能被释放。会大量存储在内存中。
六)检查是否使用了“非字面量字符串进行+”的操作。因为String类的内容是不可变的,每次运行"+"就会产生新的对象,如果过多会造成新String对象过多,从而导致JVM没有及时回收而出现内存溢出。
如String s1 = "My name";
String s2 = "is";
String s3 = "xuwei";
String str = s1 + s2 + s3 +.........;这是会容易造成内存溢出的
但是String str = "My name" + " is " + " xuwei" + " nice " + " to " + " meet you"; //但是这种就不会造成内存溢出。因为这是”字面量字符串“,在运行"+"时就会在编译期间运行好。不会按照JVM来执行的。
在使用String,StringBuffer,StringBuilder时,如果是字面量字符串进行"+"时,应选用String性能更好;如果是String类进行"+"时,在不考虑线程安全时,应选用StringBuilder性能更好。
知道原因了,解决起来就非常简单了。
参考技术A 我写web项目遇到几次 基本都是xml文件配置问题 我不清楚你是个什么情况

java内存溢出模拟_模拟实战排查堆内存溢出(java.lang.outofmemoryerror:javaheapspace)问题

 参考如下:https://blog.csdn.net/weixin_28678151/article/details/114902208 查看详情

遇到java内存溢出(oom)时,这样排查(代码片段)

一次Java内存溢出排查过程背景上周,我们项目中UAT环境突然无法访问了,查看了日志发现项目在报错java.lang.OutOfMemoryError:......javaheapspace.....,虽然是UAT环境,但是所有在未发布之前所出现的问题,我们都应该重视... 查看详情

生产环境-jvm内存溢出-jprofile问题排查

通常来说,分析堆内存快照(HeapDump)是一个很好的定位手段,开启了dump的参数:-XX:+HeapDumpOnOutOfMemoryError 有了这个参数,当我们不得不面对内存溢出异常的时候会节约大量的时间。默认情况下,堆内存快照会保存在JVM的启动目... 查看详情

outofmemoryerror内存溢出问题排查(代码片段)

OutOfMemoryError的几种情况如下:java.lang.OutOfMemoryError:Javaheapspacejava.lang.OutOfMemoryError:PermGenspacejava.lang.OutOfMemoryError:RequestedarraysizeexceedsVMlimitjava.lang.OutOfMemoryError:requ 查看详情

java线上故障排查

   Java线上故障主要会包括CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本... 查看详情

如何排查java内存泄露

...ver-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=D:\\heapdump,这样当内存溢出是就会在对应路径下生成dump文件运行程序打开jdkbin文件夹下再带的 jvisualvm.exe选择tomcat线程,打开实时监控页面可以看到对应的堆栈线程和装在类,内存的实... 查看详情

记一次线上内存溢出问题排查过程

...前线上另外的服务也出现过zookeeper连不上的问题,当时是内存溢出,日志有OutOfMemory错误,所以直接到服务器上查看内存使用情况。使用ps-ef|grepjava命令找出Java进程号,然后再用jmap-heappid命令查看jvm堆内存使用情况,结果如下图... 查看详情

java内存泄漏问题排查

...序异常退出是有规律的,每3小时一次,在57分异常退出)内存溢出:程序退出后未生成dump文件,且用jconsole显示内存一直正常。客户计算机是否有异常:查看系统日志、cpu,内存(发生问题 查看详情

频繁gc导致oom内存溢出的问题排查(代码片段)

频繁GC导致OOM内存溢出的问题排查1.问题发现2.导出内存dump3.用mat分析dump下载mat配置mat运行mat4.分析5.解决方案1.问题发现日志中打印如下,发现频繁GC并导致OOM[2021-08-2515:14:33,948][ERROR][][][DubboServerHandler-74.0.2.41:11306-thread-488]-org.a... 查看详情

老公:怎么排查堆内存溢出啊?(代码片段)

...过了死循环cpu飙高的排查过程,今天就带着老公们看看堆内存溢出我们一般怎么排查的。cpu100%排查文章在排查之前,我想jvm的基础知识大家应该都是了解了的吧?老婆我就是不了解,人家要你说给我听。行行行,诶真实拿你们... 查看详情

java内存分配与溢出

  Java程序而言,Java虚拟机有自动内存管理机制,不需要开发人员去手动释放内空间,也不容易出现内存泄漏和溢出的问题,一切看起来都很完美。一旦出现内存泄漏和溢出方面的问题,如果不了解Java虚拟机是怎么样使用内存... 查看详情

jvm线上故障排查基本操作--内容问题排查

内存问题排查说完了CPU的问题排查,再说说内存的排查,通常,内存的问题就是GC的问题,因为Java的内存由GC管理。有2种情况,一种是内存溢出了,一种是内存没有溢出,但GC不健康。内存溢出的情况可以通过加上-XX:+HeapDumpOnOutO... 查看详情

利用阿里云arms排查java大量文件处理场景堆外内存溢出(线上jvm排障之八)

背景:线上一个项目线上3节点POD,内存一点点爬升最后100%打满,然后就会触发K8s的驱逐机制,重启。然后内存又是一点点的爬升周而复始,系统完全不可用。先看线上系统POD上的内存CPU使用情形,如下图所示: 线上内存几... 查看详情

2.java内存区域与内存溢出异常

...述对于从事C、C++程序开发的开发人员来说,对象的新建内存区域和销毁内存区域(new和delete)都是由程序员手动调用的。java的内存管理是由虚拟机自动执行的。一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用... 查看详情

jvmmetaspace内存溢出排查与总结(代码片段)

一.现象前段时间公司线上环境的一个Java应用因为OOM的异常报警,导致整个服务不可用被拉出集群,本地模拟重现的现象如下:当时的解决方案是增加metaspace的容量:-XX:MaxMetaspaceSize=500m,从原来默认的256m改为500m,虽然没有再出现... 查看详情

利用阿里云arms排查java大量文件处理场景堆外内存溢出(线上jvm排障之八)

背景:线上一个项目线上3节点POD,内存一点点爬升最后100%打满,然后就会触发K8s的驱逐机制,重启。然后内存又是一点点的爬升周而复始,系统完全不可用。先看线上系统POD上的内存CPU使用情形,如下图所示: 线上内存几... 查看详情

一次内存溢出的排查经历

排查经过在春节影院APP出现保障,出现接口偶发性的超时,一段时间正常,一段时间超时非常严重,最高达到了200s并且越来越严重cpu出现飙高,由于当时运维立刻重启没有保留现场,所以没有定性问题的... 查看详情

面试官:怎么排查内存溢出?(代码片段)

...过了死循环cpu飙高的排查过程,今天就带着老公们看看堆内存溢出我们一般怎么排查的。cpu100%排查文章在排查之前,我想jvm的基础知识大家应该都是了解了的吧?老婆我就是不了解,人家要 查看详情