首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jmap及内存溢出分析

前面通过jstat可以对jvm堆的内存进行统计分析,而 jmap 可以获取到更加详细的内容,如:内存使用情况的汇总、对内存溢出的定位与分析。...查看可能存在内存泄露的分析: ? 内存溢出的定位与分析 内存溢出在实际的生产环境中经常会遇到,比如,不断的将数据写入到一个集合中,出现了死循环,读取超大的文 件等等,都可能会造成内存溢出。...如果出现了内存溢出,首先我们需要定位到发生内存溢出的环节,并且进行分析,是正常还是非正常情况,如果是正常的需求,就应该考虑加大内存的设置,如果是非正常需求,那么就要对代码进行修改,修复这个bug。...首先,我们得先学会如何定位问题,然后再进行分析。如何定位问题呢,我们需要借助于jmap与MAT工具进行定位分析。 接下来,我们模拟内存溢出的场景。...分析:这个可疑是正确的,因为已经有超过90%的内存都被它占有,这是非常有可能出现内存溢出的。 查看详情: ? 可以看到集合中存储了大量的uuid字符串。 ----

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    jvm内存溢出分析内存溢出是什么?内存溢出内存泄漏有什么区别?用到的jvm参数分析解决方法分析

    概述 jvm中除了程序计数器,其他的区域都有可能会发生内存溢出 内存溢出是什么?...当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出 内存溢出内存泄漏有什么区别?...,并提示发生在Java heap space 分析解决方法 思路 用visualVM工具分析堆快照 如果发生内存泄漏: step1:找出泄漏的对象 step2:找到泄漏对象的GC Root step3...因为分析工具会占用很大的内存,不建议在服务端进行分析。 实战 下面对刚才程序产生的堆内存快照进行分析。 打开visualVM,装入刚刚生成的快照,打开类标签页 ?...解决方案: 在应用服务器中建立一个共享lib库,把项目中常用重复的jar包存放在这里,项目从这里加载jar包,这样就会大大减少类加载的数量,方法区也“瘦身”了 如果实在不能瘦身类的话,那可以扩大方法区的容量

    1.6K61

    从main方法分析内存溢出

    内存溢出OutOfMemoryError不常遇到,起码没有姨妈空指针异常(NullPointerException)来的那么频繁。 现在就用最简单的main方法复现堆内存溢出并做分析。...eden)和两个幸存区(from、to)) 当java对象在年轻代存活一段时间经历过N次回收没有被回收掉后(N还可以自己设置),就会进入老年代,在老年代中又经历回收后积累的没有被回收的对象超负荷后就会抛出内存溢出的异常...peoples.add(abc); System.out.println(abc.toString() + i); } } 结果在生成540217个对象的时候抛出了内存溢出的异常...分析内存快照 想要更详细的分析还得生成内存快照,同样添加启动参数 参数 说明 -XX:+HeapDumpOnOutOfMemoryError 开启内存快照 -XX:HeapDumpPath=./ 存储路径...当然仅限于代码需要优化的情况,如果没有需要优化的还出现这种异常,就需要增大堆内存的空间-Xms-Xmx两个参数。 如果还不行就需要结合上面两个工具分析,做出更细化的调整。

    82420

    Java常见内存溢出异常分析

    ,我们需要根据内存溢出的时候产生的dump文件来具体分析(需要增加-XX:+HeapDumpOnOutOfMemoryErrorjvm启动参数)。...出现此种问题的时候有可能是内存泄露,也有可能是内存溢出了。 如果内存泄露,我们要找出泄露的对象是怎么被GC ROOT引用起来,然后通过引用链来具体分析泄露的原因。...如果出现了内存溢出问题,这往往是程序本生需要的内存大于了我们给虚拟机配置的内存,这种情况下,我们可以采用调大-Xmx来解决这种问题。...通过上面的实验其实也从侧面验证了一个结论:当对象大于新生代剩余内存的时候,将直接放入老年代,当老年代剩余内存还是无法放下的时候,出发垃圾收集,收集后还是不能放下就会抛出内存溢出异常了 持久带溢出(OutOfMemoryError...使用一些应用服务器的热部署的时候,我们就会遇到热部署几次以后发现内存溢出了,这种情况就是因为每次热部署的后,原来的class没有被卸载掉。

    1.3K70

    Java内存溢出OOM使用Mat分析

    20m,程序不停的创建对象,而对象又是在堆上分配内存,一直不停的向List中添加对象,没有垃圾回收,导致堆内存溢出(OutOfMemoryError)....Mat工具分析堆 1.下载Mat分析软件:https://www.eclipse.org/mat/downloads.php 2.VM参数加上: -XX:+HeapDumpOnOutOfMemoryError...开启堆内存溢出导出堆内存到文件,默认在项目的根目录下.如果需要指定其它路径用-XX:HeapDumpPath=/tmp,会生成一个名字类似的java_pid28790.hprof文件. 3.使用Mat打开...List res=new ArrayList(); res是局部变量,在栈上分配内存,res中存放的是UserTest实例对象的堆内存地址(引用),JDK1.8中打开指针压缩(-...Retained Heap=112424+224848=337296和Mat分析的结果一致. 相关文章 JVM,JRE,JDK之间的区别和联系

    58410

    生产环境JVM内存溢出案例分析

    本文将通过一个线上环境JVM内存溢出的案例向大家介绍一下处理思路与分析方法。 案例:架构组接到某项目组反馈,Zabbix监控上显示JMX不可用,请求协助处理。...分析思路: JMX不可用,往往是由于垃圾回收时间停顿时间过长、内存溢出等问题引起的。 线上故障分析的原则是首先要采取措施快速恢复故障对业务的影响,然后才是采集信息、分析定位问题,并最终给出解决办法。...如何快速恢复业务 通常线上的故障会对业务造成重大影响,影响用户体验,故如果线上服务器出现故障,应规避对业务造成影响,但不能简单的重启服务器,因为需要尽可能保留现场,为后续的问题分析打下基础。...通常的做法是隔离故障服务器。 通常线上服务器是集群部署,一个好的分布式负载方案会自动剔除故障的机器,从而实现高可用架构,但如果未被剔除,则需要运维人员将故障服务器进行剔除,保留现场进行分析。...分析解决问题 首先可以通过查看日志,确定是哪种内存溢出,堆内存溢出可发生的地方:Java heap space(堆空间)、perm space(持久代)。 ?

    2.7K20

    Jvm中各种内存溢出情况分析

    上图中每个区域都可能出现oom,除此之外还有直接内存(direct memory)溢出。...堆溢出 java堆用于存储对象实例,只要不断地产生对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量达到最大堆的容量限制后就会产生内存溢出异常。...可达性分析算法 判断对象是否可以回收采用的是可达性分析算法,只要被gc roots引用的对象就不会被回收。那么gc root有那几种?...通过mat内存分析工具打开dump出来的文件,如果是内存泄漏,查看泄漏对象到gc roots的引用链,找到泄漏对象是通过怎样的路径与gc roots相关联并导致垃圾收集器无法自动回收它们的,就能比较准确定位出泄漏代码的位置...关于虚拟机栈和本地方法栈的溢出,在Java虚拟机规范中描述了两种异常: 线程执行深度大于虚拟机所允许的深度时,将抛出StackOverflowError 如果虚拟机在扩展栈时无法申请到足够的内存空间,将抛出

    96930

    Java内存溢出OOM使用Mat分析

    20m,程序不停的创建对象,而对象又是在堆上分配内存,一直不停的向List中添加对象,没有垃圾回收,导致堆内存溢出(OutOfMemoryError)....Mat工具分析堆 1.下载Mat分析软件:https://www.eclipse.org/mat/downloads.php 2.VM参数加上: -XX:+HeapDumpOnOutOfMemoryError...开启堆内存溢出导出堆内存到文件,默认在项目的根目录下.如果需要指定其它路径用-XX:HeapDumpPath=/tmp,会生成一个名字类似的java_pid28790.hprof文件. 3.使用Mat打开...当前案例未打开指针压缩: 14053个引用地址占用内存大小: 14053*8=112424,Shallow Heap占用112448字节,还有24字节明显就是res容器本身占用的内存大小....Retained Heap=112424+224848=337296和Mat分析的结果一致.

    18610

    Java内存溢出

    Java内存溢出溢出 大量对象占据了堆空间,而且这些对象是强引用,导致无法回收 直接内存溢出 Java的NIO支持直接内存使用,从堆外获得内存空间,由于直接内存没有被Java虚拟机完全托管,若使用不当...,容易触发直接内存溢出。...多线程导致内存溢出 线程的栈空间也是在堆外分配的,和直接内存相似,线程过多,会导致内存溢出。 永久区溢出 永久区是存放元数据的区域。如果定义了太多类型,那么永久区有可能溢出。...GC效率低下引起内存溢出 内存回收时,如果GC效率低下,那么系统的性能会收到严重的影响。...如果系统堆空间太小,那么GC所占的时间就会较多,并且回收所释放的内存就会较少, 根据GC所占用的系统时间,以及释放的内存大小,虚拟机会评估GC的效率,一旦认为GC的效率过低,就会抛出内存溢出异常。

    2.6K20

    内存溢出内存泄露

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。...内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。...内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。...这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出....但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

    4K10

    JVM实战:内存溢出的定位与分析

    文章目录 模拟内存溢出 运行测试 导入到MAT工具中进行分析 内存溢出在实际的生产环境中经常会遇到,比如,不断的将数据写入到一个集合中,出现了死循环,读取超大的文件等等,都可能会造成内存溢出。...如果出现了内存溢出,首先我们需要定位到发生内存溢出的环节,并且进行分析,是正常还是非正常情况,如果是正常的需求,就应该考虑加大内存的设置,如果是非正常需求,那么就要对代码进行修改,修复这个bug。...首先,我们得先学会如何定位问题,然后再进行分析。如何定位问题呢,我们需要借助于jmap与MAT工具进行定位分析。 接下来,我们模拟内存溢出的场景。...模拟内存溢出 编写代码,向List集合中添加100万个字符串,每个字符串由1000个UUID组成。如果程序能够正常执行,最后打印ok。...导入到MAT工具中进行分析 可以看到,有88.22%的内存由Object[]数组占有,所以比较可疑。 分析:这个可疑是正确的,因为已经有88%的内存都被它占有,这是非常有可能出现内存溢出的。

    44220

    内存溢出排查

    继续...... 3、 内存调优,减小xss值、JVM内存,仍然解决不了。      ...TestNativeOutOfMemoryError.java:20)   问题重现,在反复运行几次后发现,生产系统最大只能创建980多个线程,生产系统操作系统64位centeros,jdk1.7,64G内存...$ su Bst118   $ ulimit -u   $ 1024   生产上所有程序都是在Bst118账户下运行,于是查看该账户下所有的线程数总和为950,也即是说,随时都可能会超过1024,导致内存溢出...于是增加一条:Bst118     soft    nproc     20000   为什么设置为20000,因为测试后发现,在运行到35000左右,系统就报内存溢出了,操作系统所有命令都不能使用,因此将程序最大线程数限制在...修改后再没出现内存溢出错误。问题解决。 三、思考   1、经过总结,在遇到问题后,不能盲目的到处修改,首先要做的就是重现问题,顺藤摸瓜,逐步的找出根本原因。

    22640

    内存溢出内存泄漏

    什么是内存溢出? 通俗的讲就是设备内存不够了。就好比我们的手机,运行内存是4G的,当我们运行了太多的程序时,在运行其他的软件时就会很卡或者提示xx运行停止。 什么是内存泄漏?...内存泄漏就是一些资源利用之后没有得到及时的释放,导致这种垃圾资源占用内存越来越多,导致内存可用资源越来越少。 导致内存溢出的情况有哪些?... 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;  集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;  代码中存在死循环或循环产生过多重复的对象实体;  使用的第三方软件中的...BUG;  启动参数设定的过小; 怎么解决内存泄漏?

    3.1K50
    领券