欢迎来到天天文库
浏览记录
ID:32658071
大小:373.14 KB
页数:31页
时间:2019-02-14
《jvm运行状态监控及分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、文档编号:SR-SE-M-8记录号:文档版本:v文档版本〉文档密级:JVM运行状态监控及分析工具站去JVM运行状态监控及分析记录号:作者:校对:审核:批准:PPQA:起始日期:结束日期:目录1简介11.1冃的11.2背景11.1定义、首字母缩写词和缩略语11.2参考资料11.3约束12常见JVM内存相关问题现象12.1栈溢出:StackOverflowError12.2堆溢出22.3持久区(方法区)溢出32.4无法创建OS木地线程42.5内存泄漏42.6JVM异常退出53JVM运行时信息收集63.1ThreadDump/线程转储63.2JavaHeapDump/堆转储73.2.1SU
2、N/OracleHotSpot73.2.2IBMA1X+J9JVM83.3GC信息94JVM远程监测94」无认证方式94.2认证方式105常用工具115.1JVISUALVM115.1.1连接远程JVM11仅供内部参考r5.1.2获取ThreadDump145.1.3获取HeapDump155.2EclipseMemoryAnalyzerTool,MAT165.2.7/TJfHeapDump及LeakSuspectsReports165.2.2查看Heap中的对象195.2.3查看DominatorTree215.2.4查看线程信息226场景分析示例236.1JVM内的Deadloc
3、k与ThreadDump23技术方案1简介1.1目的1.2背景应用系统运行时出现内存溢出问题,需要定位及解决。1.3定义、首字母缩写词和缩略语暂无。1.4参考资料木方案的参考资料如下:•周志明,《深入理解Java虚拟机:JVM高级特性与最佳实践》•MAT,www.eclipse.org/mat•从转储(Dump)文件中调试并除错http://www.oschina.net/question/!29540%5f232201.5约束本文描述的工具,只在JDK6以上版本中进行验证。可能部分工具在JDK1.4.2.14和JDK1.5.0,06以上也能够执行,但并未实际测试验证,仅供参考。2常
4、见JVM内存相关问题现象通常内存溢出时JVM会提示具体的内存溢出原因,下面是儿种常见的情况及简要的原因说明及相关的JVM配置。2.1栈溢出:StackOverflowErrorJVM输出信息:ujava.lang.StackOverflowErrofJVM运行状态监控及分析JVM相关机制:JVM在执行Java方法调用时需要使用栈传递调用参数、返回值以及保存局部变量表,通常组织为栈帧(StackFrame)结构。从概念上说,每次Java方法调用都会消耗一定的栈内存,当这个方法调用结束返回后释放这部分内存。而毎个Java线程对应的栈内存是有限的(通常JVM启动后就固定了),因此当方法嵌
5、套层数过多或者栈帧内的数据结构(如局部变量表)过大时,可能出现StackOverflowErroroJVM控制参数:可以通过-XsslO24K设置线程栈大小为1024Ko通常无需设置此参数,在不同OS下的JVM均有自己的默认值设置,一般在256K-1024KZ间。常见原因分析建议:出现此问题通常应该先分析应用系统的原因,而不是考虑增大“・Xss”参数设置值。因为出现此问题的最可能原因是过深的方法调用(比如错误的递归调用造成方法调用层次过深),即应用程序中的编程错误造成栈溢出。当出现StackOverflowError时,根据此异常的详细信息通常可以比较明确地找到错误代码的可能位置,通
6、常不需要复杂的工具支持。2.2堆溢出JVM输出信息:ujava.lang.OutOfMemoryError:Javaheapspace",或者类似输出信息,视JVM厂商及版本略有区别,但关键字都是“heap”或者“堆SJVM相关机制:从概念上说,Heap是存储Java类实例和数组的内存区。比如任何“obj=newXClass();”的调用都是在Heap中进行内存分配,当不能成功进行这种内存分配时,JVM将抛出ujava.lang.OutOfMemoryError:JavaheapspaceMoJVM控制参数:•-Xms512m:设置Heap最小值为512m;•-Xmx1024m:设置
7、Heap最大值为1024m;JVM控制参数设置相关知识及建议:•在牛产环境中可以将・Xms和・Xmx设为相同大小,避免JVM动态调整Heap大小;•在32位系统上(无论是Windows还是Unix/Linux),・Xmx参数通常无法设置到大于1500m,且此值在不同的系统上并不相同;•在32位系统上,并不建议将・Xmx设到最大(如1500m)。因为32位系统中JVM进程的可用的内存是有限的(一个32为系统上的进程的地址空间最大为4G,能使用的内存最大为4G
此文档下载收益归作者所有