-
heapdump 如何分析
- 时间:2024-11-06 09:33:37
大家好,今天Win10系统之家小编给大家分享「heapdump 如何分析」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!
1.heapdump文件太大无法分析怎么办
v
HeapAnalyzer/HeapRoots是一款针对IBM JDK的内存文本镜像HeapDump的分析工具
? 特性:
– 离线分析,不影响生产系统
– 需要得到IBM JDK内存镜像
– 只支持IBM JDK
– HeapRoots字符界面,HeapAnalyzer是HeapRoots的图形界面
? 启动方式:
– Kill -3 <pid>得到heapdump文件
– 启动HeapAnalyzer或者HeapRoots,加载heapdump文件
– 图形化分析
? HeapDump是IBM JDK Heap内存的一个文本镜像,默认生成位置在Weblogic Server启动目录下,通常是Domain目录
? 如果得不到HeapDump,可能是禁止生成
? HeapDump的生成开关
– export IBM_HEAPDUMP=true
– export IBM_HEAP_DUMP=true
– export IBM_HEAPDUMP_OUTOFMEMORY=true
– export IBM_JAVADUMP_OUTOFMEMORY=true
– export IBM_JAVACORE_OUTOFMEMORY=true
– export IBM_HEAPDUMPDIR=<directory_path>
? 注意:
– 通常HeapDump会比较大,尤其是在Heap内存设置很大的情况下
– 为了重现问题,得到现场数据,建议先把HeapDump调小,推荐1G以下
– 在Window上,如果HeapDump大于1G,可能会无法打开,出现OOM错误
– 启动HeapAnalyzer需要指定-Xmx参数
? 启动界面
? 内存按树状引用关系显示
? 内存按对象和类型显示
? 找到怀疑泄漏的内存对象
预防出现OOM,需要注意的地方:
? 系统管理
– 足够的物理内存,设置适当的Swap区大小
– 最佳的HEAP内存设置
– 使用最新的操作系统/最新的JDK/最新版本的WLS
– 使用Weblogic Server认证的JDK
– 尽量少使用第三方本地代码,或使用Java替代方案
– 根据应用设置适当的HttpSession Timeout时间
– 根据应用设置适当的EJB Pool/Cache
? 代码编写
– 不要放置大量对象到Session中
– 不要缓存太多数据
– 用完的资源一定要close(),例如IO,File,JDBC连接
– 合理的从数据库取得适量数据
– XML解析对大内存的需求
– 统计和报表业务的负荷问题
下面结合实例来进行讲解:
解决建议:
1) IBM JDK 1.4及以前版本:-Xms最好是-Xmx的一半对于SUN和HP的JDK,默认采用的是分代复制垃圾收集策略,建议将最大和最小值设成一样大小。IBM 从1.5 版本的JDK开始,也支持分代复制垃圾收集策略,选择该策略时,也建议将最大和最小值设成一样大小。
2) 程序能否直接在后台转换好文件根式,前台只负责下载,能较少资源占用。
3) 前台数据量还要控制。因为报表在weblogic实现确实需要足够支撑力来支持,目前没有办法,bea都不建议用weblogic来统计报表,不过目前也没办法了,WEB是趋势,框架不能改只能来优化。
报表异步程序内存溢出讲下dump文件看到的一些现象以及分析过程:
看了下内存异常的javacore 文件我们可以看到core文件中的程序以下部分,在做数据转换,以及显示异步数据结果(如图一):那这个程序是怎么导致内存溢出的呢,我们可以通过图二看到Monitor监控到有heap lock导致了内存溢出,heap锁,heap分配不足,导致内存溢出,目前看了设置已经调整到
-Xms1024m -Xmx2048m ,看来内存分配也不能解决太大问题了,32位jdk 已经到极致,除非升级到jdk1.5+weblogic9,不过这个目前不考虑了。
既然看到了内存不足,是什么在占用这么多内存资源呢?我们来看图:
可以看到占用了内存86%的资源,除了系统资源占用外,都被他所消耗,那还怎么干活,资源都光了。可以看到图三中这些都是一些arrayLIst 数组列表,这些一共有多少个呢?看图三右侧图可以看到多少,已经很多了
可以看到占用了内存86%的资源,除了系统资源占用外,都被他所消耗,那还怎么干活,资源都光了。可以看到图三中这些都是一些arrayLIst 数组列表,这些一共有多少个呢?看图三右侧图可以看到多少,已经很多了
at com.asiainfo.openboss.crm.cq.PublicActionTransLineToRow.TransData(PublicAction.java(Compiled Code))
at com.asiainfo.openboss.crm.cq.PublicActionTransLineToRow.doTranfer(PublicAction.java:215)
at com.asiainfo.openboss.crm.cq.PublicAction.StyleTransfer(PublicAction.java:2193)
at com.asiainfo.openboss.crm.cq.PublicAction.ListToRowShow(PublicAction.java:2146)
at com.asiainfo.openboss.crm.cq.PublicAction.ShowByRptOut(PublicAction.java:2091)
at com.asiainfo.openboss.crm.cq.PublicAction.UpdateData(PublicAction.java:2000)
at com.asiainfo.openboss.crm.cq.PublicAction.showAsynSonbrQueryResult(PublicAction.java:1232)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
到这里应该就可以看到了应用的地方了,所以就请研发立刻进行代码优化吧。
2.如何生成WAS的heapdump文件
WAS6.1中,在使用IBM JDK的平台上,可以直接使用以下的方法,随时生成所需的heapdump文件。如果在性能诊断顾问程序配置里面选中了"启用自动堆转储收集,则可以自动在WebSphere profile所在的路径下(例如/opt/IBM/WebSphere/WAS6.1/profiles/AppSrv01)生成heapdump文件,备用户进行分析。
在使用IBM SDK的平台上,例如AIX, Linux和Windows,在启用了性能诊断顾问工具后,如果探测到有内存泄漏发生,WebSphere会自动生成两个heapdump文件,供后续分析使用。
我们在任何时候,可以随时手动生成所需的heap dump文件。在WAS6.1 profile的bin目录下,首先运行wsadmin 脚本客户端,然后可以调用generateHeapDump操作来完成。
关键步骤:
1. 找到JVM对象名字。
<wsadmin> set objectName
WebSphere:type=JVM,process=<WebSphere服务器名字>,node=<节点名字>,*]
2. 对JVM MBean调用generateHeapDump操作。
<wsadmin> $AdminControl invoke $objectName generateHeapDump
例如:
[root@csspvm bin]# pwd
/opt/IBM/WebSphere/WAS6.1/profiles/AppSrv01/bin
[root@csspvm bin]# ./wsadmin.sh -username root -password demo4you
WASX7209I: Connected to process "server1" on node csspvmNode02 using SOAP
connector; The type of process is: UnManagedProcess
WASX8011W: AdminTask object is not available.
WASX7029I: For help, enter: "$Help help"
wsadmin>set objectName [$AdminControl queryNames
WebSphere:type=JVM,process=server1, node=csspvmNode02,*]
WebSphere:name=JVM,process=server1,platform=proxy,node=csspvmNode02,
j2eeType=JVM,J2EEServer=server1,
version=6.1.0.0,type=JVM,mbeanIdentifier=JVM,cell=csspvmNode02Cell,spec=1.0
wsadmin>$AdminControl invoke $ objectName generateHeapDump
/opt/IBM/WebSphere/WAS6.1/profiles/AppSrv01/./heapdump.20060904.075650.3576.phd
wsadmin>quit
理想情况下,在探测到问题时,尽快生成一个初始的heap dump,然后密切监控内存使用情况,等到泄漏了足够的内存的时候,再生成另外一个heap dump,这样可以对比分析以更准确地找到泄漏的原因。
注: 生成HeapDump文件的过程是比较耗资源的,所以请只在必须的时候做这样的操作。
以上就是关于「heapdump 如何分析」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~
【文章★来♂自Win10系统之家,未经允许不得转载!】
相关文章
-
1.heapdump文件太大无法分析怎么办vHeapAnalyzer/HeapRoots是一款针对IBMJDK的内存文本镜像HeapDump的分析工具?特性:–离线分析,不影响生产系统–需要得到IBMJDK内存镜像–只支持IBMJDK–HeapRoots字符界面,HeapAnalyze...
-
1.百度推广怎么做数据分析?您好朋友做百度竞价推广,最重要的不是平日里常说的那些关键词选择、创意书写等等技巧,当然这些是基础,最重要的是数据分析,因为分析数据你才可能找出问题所在,数据分析的越细越能准确找出问...
-
1.企业网站如何进行竞争对手分析对于企业站做网络营销应当从以下几个方面进行总结:1、竞争对手分析;2、用户调查;3、市场定位;4、制作内容;5、渠道测试及选择;6、数据回收分析;7、调整网站进行优化。对于为何要做竞争对手分...
-
1.如何计算主力成本?如何计算主力成本~最简单的办法~~找到最近三十个交易日的最低价。然后往前找成交量最大,换手率大于10,下影线最长,十字形态的K线,然后取其前一日和后一日的均价,基本和近期主力成本接近。这招很实...