Java Performance - 如何调查解决内存问题
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/)
Java Performance - 如何调查解决内存问题的更多相关文章
- Java Performance - 如何调查解决 CPU 问题
随着硬件的发展,往往服务器会配置足够的 CPUs, Java Server/服务器不太有 CPU 问题:但是偶尔因为 代码海量循环 或者 线程安全性(thread safe), 还是会带来 CPU 问 ...
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- 详解java中CAS机制所导致的问题以及解决——内存顺序冲突
[CAS机制] 指的是CompareAndSwap或CompareAndSet,是一个原子操作,实现此机制的原子类记录着当前值的在内存中存储的偏移地址,将内存中的真实值V与旧的预期值A做比较,如果不一 ...
- 老李分享:《Java Performance》笔记1——性能分析基础 1
老李分享:<Java Performance>笔记1——性能分析基础 1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...
- Android 如何有效的解决内存泄漏的问题
前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的作用. 本文的内存泄漏检测工具是:LeakCana ...
- Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法
Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...
- android解决内存溢出的问题(没有从根本上解决)
Android游戏虚拟机算法JNI 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完 ...
- PHPExcel解决内存占用过大问题-dw 查找memoryCacheSize把1M改为2048M
http://blog.sina.com.cn/s/blog_4ec7952d0101fcrd.html PHPExcel解决内存占用过大问题-设置单元格对象缓存 PHPExcel是一个很强大的处理E ...
- Java高并发如何解决
Java高并发如何解决 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧 ...
随机推荐
- Poj(2135),MCMF,模板
题目链接:http://poj.org/problem?id=2135 Farm Tour Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- linux下安装图片识别环境
升级python http://blog.csdn.net/jcjc918/article/details/11022345 安装MySQLdb sudo yum install MySQL-pyth ...
- WPF调用office2010的ppt出错
各位热爱WPF编程小伙伴不可避免的会遇到将ppt嵌入到自己编写的软件,可是有时候会遇到错误,此错误值出现在卸载office2013并安装其他版本office时候会出现.这是由于某些机器上offic ...
- 【MySQL】MySQL的find_in_set的使用例子
> 参考的优秀文章 FIND_IN_SET(str,strlist) > 简单的例子 这个函数的功能是,在第二个参数中寻找第一个参数,并返回第一个参数所在的位置,不存在则返回0.其中,第二 ...
- 复旦大学2013--2014学年第一学期(13级)高等代数I期末考试第七大题解答
七.(本题10分)设 \(A\) 为数域 \(K\) 上的 \(n\) 阶非异阵, 证明: 对任意的对角阵 \(B\in M_n(K)\), \(A^{-1}BA\) 均为对角阵的充分必要条件是 \ ...
- FZU 2168 防守阵地 I
Problem Description 部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度, ...
- 完成Adventure中的主方法
package a; public interface CanSwim { void swim(); } package a; public interface CanFly { void fly() ...
- CodeForces 490C Hacking Cypher
Hacking Cypher Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Sub ...
- linux 中 ll 命令如何让查询结果按时间升序或降序排序?
-t选项的功能是使输出的结果将以时间降序排列.如果希望按时间的升序排列,可以使用管道符将返回的结果传入tac命令.用法示例:查询当前目录的文件并以降序排列: ll -t查询当前目录的文件并以升序排列: ...
- CUBRID学习笔记 14 dll加载错误
这个问题通常是缺少文件cascci.dll 或者版本错误 32 64弄错了 C:\Program Files (x86)\Python266>python.exe Python 2.6.6 (r ...