博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Performance - 如何调查解决内存问题
阅读量:5236 次
发布时间:2019-06-14

本文共 1121 字,大约阅读时间需要 3 分钟。

JVM 的内存溢出/不足/OutOfMemoryError/垃圾收集恶性循环是需要解决,又是屡见不鲜的问题。

建议阅读官方的 Troubleshooting Guide for Java SE 6 with HotSpot VM > Troubleshooting Memory Leaks

  • 首先清楚判定问题 - GC 日志是判断内存问题最准确的方法,因为 Java 的内存问题的本质是 GC 问题
    • Heap 堆不足溢出
    • Stack 堆栈不足溢出
    • Perm 堆不足溢出 - Java 8 取消了 Perm
    • 垃圾收集的恶性循环 - 注意:这几乎是最最常见的现象
  • Stack 堆栈不足溢出 - 错误是 StackOverFlowError

JVM 会打印出来具体的 Stack Trace

如果 Stack 比较大但是没有递归,那么调大 -Xss ( Server 默认 1024K )

如果 Stack Trace 显示递归,那么修改代码

 

  • Perm 堆不足溢出 - OutOfMemoryError 带着 PermGen space

调大 -XX:MaxPermSize,比如 768m

  • Heap 堆不足溢出 - OutOfMemoryError 带着 Heap Space

解决:调大 -Xmx,如果够大了需要 DEBUG - 参照下面 DEBUG HEAP

 

  • 垃圾收集的恶性循环 - 注意:这几乎是最最常见的现象

现象:

JVM 不相应,内存基本耗光,分析 GC 日志,会看到 花了很久做 FullGC ,释放了一点内存,很快又需要FullGC,比如 10 秒做了FullGC,1 秒后又需要FullGC 然后 10 秒完成 FullGC, 反复如此。

解决:调大 -Xmx,或者 DEBUG - 参照下面 DEBUG HEAP

  • DEBUG HEAP - 建议抓到 heapdump, 然后分析
    • 抓取 heapdump - 很多方法,但是常用如下 (注意针对非 IBM Java)

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path

--配置参数内存溢出时候自动抓取,注意往往内存问题表现为垃圾收集恶性循环,那就产生不出来。

 

jmap.exe -dump:format=b,file=HeapDump.hprof <pid>

--命令抓取

    • 分析 heapdump

建议 Eclipse Memory Analyzer (http://www.eclipse.org/mat/)

 

转载于:https://www.cnblogs.com/tang88seng/p/5117472.html

你可能感兴趣的文章
(组件、路由)懒加载
查看>>
数据库查询拼接
查看>>
《C++反汇编与逆向分析技术揭秘》之十——构造函数
查看>>
2018年学习的一门语言
查看>>
lightoj 1057 - Collecting Gold(状压dp)
查看>>
1401机器翻译(Noip2010提高组第1题)
查看>>
矢量图
查看>>
CSS--文本属性
查看>>
【二次元的CSS】—— 用 DIV + CSS3 画咸蛋超人(详解步骤)
查看>>
关于restful开发的疑惑
查看>>
笔记:html常见的兼容问题
查看>>
如何获取HTML中Select选中项的值
查看>>
什么是Reactor模式,或者叫反应器模式
查看>>
高效程序员的工作场所和装备
查看>>
【GO基础】main redeclared in this block问题的排查与解决
查看>>
给按钮添加 toSearch_Button.setOnClickListener(this);出错 解决办法
查看>>
python之线程、进程入门
查看>>
什么是URL
查看>>
English trip M1 - PC7 Can I Borrow Your Ping-Pong? Teacher:Patrick
查看>>
Office 2007 产品密钥(序列号/CD-KEY)
查看>>