如何监控GC及内存问题解决方案概述

转载 2015年07月08日 23:06:15

内存问题错综复杂,本人水平也有限,浅薄之见仅供参考。

一、GC监控

GC日志记录了内存使用和回收状态,出现内存故障时,可作为分析排查手段。

1. 启用GC监控的方法:增加java启动参数-verbose:gc,输出信息的样例:

  GC 135: total final references 4390; cleared final references 8. 
GC 135: total phantom references 0; cleared phantom references 0. 
GC 135: total old soft references 0; cleared old soft references 0. 
GC 135: total JNI global weak references 0; cleared JNI global weak references 0. 
GC 136: starting collection, maximum allocation reached. 
GC 136: live objects 1081046; collected objects 6038; collected(KB) 558. 
GC 136: queued for finalization 0; total soft references 113; cleared soft references 18. 
GC 136: current heap(KB) 716784; current threshold(KB) 262144. 
GC 136: collect (milliseconds) 1314. 
GC 136: current cycle allocation(KB) 0; previous cycle allocation(KB) 532. 
GC 136: total weak references 1321; cleared weak references 0. 

2. 将GC日志输出到文件:不同JDK设置的参数不同,参考JDK官方文档
   SUN:-Xloggc:filename (例如:-Xloggc:D:/gc.log)
   IBM:-Xverbosegc:file=filename 或 -Xverbosegclog:filename
   HP :-Xverbosegc=filename  

3. 如何设置Java启动参数:有多种方式,以下各举一例
   Tomcat:在catalina.bat的“set JAVA_OPTS=%JAVA_OPTS% ”后设置
   WebLogic:在startWebLogic.cmd的“%JAVA_HOME%\bin\java %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% ”后设置
   WebSphere:进入管理控制台,应用服务器->进程定义->Java虚拟机高级定义

4. GC日志的图形分析工具:HP的jtune


二、内存问题描述

典型现象是系统运行一段时间后,报OutOfMemoryError错误、页面非常慢、不响应或完全不再接受请求,而此时通过观察JVM内存,发现内存急剧上升到最大值并居高不下。

这种问题出现后,往往很棘手,通常是由于应用程序不合理造成的,而不合理程序或内存泄漏的源头可能并不明显。本人的一次经历是,经过十多天各种测试手段后,最后确定问题是由一处String累加引起的,改成StringBuffer就解决了,可见,忽略“小问题”往往会带来大麻烦。

三、分析手段

1. 分析GC日志、系统日志
2. 程序中设置监控断点
3. 尽可能重现故障并同时监控JVM内存,找出引起内存急剧上升的规律
4. 检查关键程序或频繁使用的工具类的合理性

四、解决手段

1. 主要从程序入手:降低内存使用量;字符串累加时以StringBuffer代替String;随时释放不再需要的对象;SQL优化及避免频繁取出大量数据;Session中不要放大的数据。。。
2. 据WebSphere和WebLogic官方建议:通常情况下JVM的Heap最小值和最大值可设成一样(根据实际情况调整),可取系统内存的25%-75%,保证JVM有合理足够的内存大小
3. 应用服务器的其他优化措施

五、应急措施

1. 不设定JVM的最大Heap上限
2. 程序中判断内存吃紧时执行Runtime.gc()强制垃圾收集,此方式比自动收集彻底,可一定程度上改善内存利用效率
3. 在不影响业务的情况下,定期重启应用服务器

druid监控设置以及常见问题解决方案

配置监控 1.打开监控统计 ...

druid监控设置以及常见问题解决方案

配置监控 1.打开监控统计              init-method="init" destroy-method="close">

监控工程安装常见问题解决方案

在一个监控系统完工以后需要进入调试阶段、试运行阶段以后才能交付使用,有可能出现各种故障现象,例如常见的:不能正常运行、系统达不到设计要求的技术指标、整体性能和质量不理想,特别是对于一个复杂的、大型的监...
  • hank212
  • hank212
  • 2014年05月07日 14:59
  • 740

项目内存问题解决方案分析

项目内存问题解决方案分析

JVM内存限制问题解决方案

这里向大家描述一下JVM内存限制的解决方法,众所周知,JVM内存是受限的,一为机器的体系架构,二为操作系统本身,当然各操作系统的内存管理机制也有区别。 你对解决JVM内存限制有什么好的方法吗...

记录学习《0Day安全》路上遇到的问题解决方案 -- 形形色色的内存攻击技术!

__author__ = "lit0"C++ 虚函数利用问题:利用原理( 书上有简单描述一遍): C++ 虚函数调用是动态的, 入口地址是在虚表(Vtable)中,使用时先通过指针找到虚表,然后取...
  • Z_LiT0
  • Z_LiT0
  • 2017年04月22日 18:37
  • 260

MyEclipse 内存不足问题解决方案

1: 打开MyEclipse目录下的myeclipse.ini文件 在后面修改下面几个属性 -vmargs -Xms512m              ( Java能够分配的内存) ...

Android中处理加载大量图片从而导致内存溢出问题解决方案 总结 ----转

在做Android图片程序的时候,由于图片比较多,很有很的机会出现OOM的机会,根据网上的资料做了些总结,期待能够减少OOM出现的机会。 1.使用底层的方法来替代使用java层的方法...

iphone内存管理的具体问题解决方案

 iPhone 开发内存管理开发iPhone 应用程序并不难,基本上就是三个词 - “memory, memory, memory” 。iPhone OS 对内存的要求很严格,有memory leak...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何监控GC及内存问题解决方案概述
举报原因:
原因补充:

(最多只允许输入30个字)