`
xuyelongjava
  • 浏览: 37483 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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

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

一、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. 在不影响业务的情况下,定期重启应用服务器

分享到:
评论

相关推荐

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第4讲 jvm初体验-内存溢出问题的分析与解决 免费 00:17:59  第5讲 jvm再体验-jvm可视化监控工具 免费 00:21:17  第6讲 杂谈 免费 00:12:37  第7讲 Java的发展历史 00:27:24  第8讲 Java的发展历史续 00:...

    matlab回归分析计算t统计量代码-GC_clean:用于计算和研究神经科学中格兰杰因果关系的脚本和函数

    计算GC的方法有多种,有些是快速的,有些是对疾病问题更健壮的方法(但是很慢,可能会消耗很多内存)。 GC的计算通常可以分为三个步骤(时域计算): 计算输入时间序列的多元(也称为)。 使用自相关来解决问题,并...

    第3章 Hadoop 2 3.1. 简介 2 3.1.1. 概述 2 3.2. 环境搭建 2 3.2.1. 搭建过程总览 2

    第3章 Hadoop 2 3.1. 简介 2 3.1.1. 概述 2 3.2. 环境搭建 2 3.2.1. 搭建过程总览 2 3.2.2. 集群规划 3 ...3.3. 常见错误解决方法 36 3.3.1. 查看日志 36 3.3.2. 无法启动hadoop集群的检查方法 37 3.3.3. 执行jps

    WSI-analysis:自动全幻灯片图像预处理的Python脚本

    大多数成功的解决方案都采用基于补丁的范例。概述当前,此仓库包含用于补丁提取的代码(从WSI),并将不断更新。 :)(准备就绪时,将添加基于深度学习的分类和细分代码)。补丁提取从WSI提取补丁时,有几个棘手的...

    千方百计笔试题大全

    199、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目中用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时...

    java面试宝典

    199、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目中用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时...

    《C++编程艺术》教程+代码

    7.11 寻找“最优”解决方案 198 7.12 回到丢失钥匙的问题 204 7.13 尝试完成以下任务 207 第8章 定制STL容器 208 8.1 STL的简要回顾 208 8.1.1 容器 209 8.1.2 算法 209 8.1.3 迭代器 209 8.2 其他的STL实体 209 8.3...

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

Global site tag (gtag.js) - Google Analytics