- 2
- 0
- 约2.39千字
- 约 7页
- 2017-03-04 发布于四川
- 举报
借助开源工具高分效析Java应用的运行
借助开源工具 高效分析Java应用的运行 不止一次,我们都萌发过想对运行中程序的底层状况一探究竟的念头。产生这种需求的原因可能是运行缓慢的服务、Java虚拟机(JVM)崩溃、挂起、死锁、频繁的JVM暂停、突然或持续的高CPU使用率、甚至于可怕的内存溢出(OOME)。好消息是现在已有许多工具能帮你得到Java虚拟机运行过程中的不同参数,这些信息有助于你了解其内部状况,从而诊断上述的各种情况。 在这篇文章中,我将介绍一些优秀的开源工具。其中一些是JVM自带的,另一些则是第三方工具。我将从最简单的工具开始介绍,逐渐过渡到一些比较复杂的工具。本文的目的是帮助你找到合适的调试诊断工具,这样当程序出现执行异常、缓慢或根本不能执行时,手头随时有可用的工具。 好了,让我们出发。 如果程序出现不正常的高内存负载、频繁无响应或内存溢出,通常最好的分析切入点是查看内存对象。幸好JVM内置了工具“jmap”,让它天生就能完成这种任务。 Jmap(借助JPM的一点帮助) Oracle将jmap描述为一种“输出进程、核心文件、远程调试服务器的共享对象内存映射和堆内存细节”的程序。本文将使用jmap打印一张内存统计图。 为了运行jmap,你需要知道被调试程序的PID(进程标识符)。得到PID的简单办法是使用JVM提供的jps,它能列出机器上每一个JVM进程及其PID。jps输出结果如下图: ▲jps命令的终端输出 为了打印内存统计图,我们需要打开jmap控制台程序,并输入程序的PID和“-histo:live”选项。如果不添加这个选项,jmap将完整导出该程序的堆内存,这不是我们想要的结果。所以,如果想得到上图中“eureka.Proxy”程序的内存统计图,我们应该用如下命令来运行jmap:以下是代码片段: jmap –histo:live 45417 上述命令输出如下: ▲命令jmap -histo:live的输出结果显示了堆中现有对象的个数 结果中每行显示了当前堆中每种类类型的信息,包含被分配的实例个数及其消耗的字节数。 本例中,我请同事有意给程序增加了一处明显的内存泄露。请特别注意位于第8行的类,CelleData。将它与下图显示的4分钟后截屏进行比较: ▲jmap的输出表明CelleData类的对象数目增加了 请注意CelleData类现在已经变为系统中第二多的类,短短4分钟内已经增加了631,701个额外实例。等待约一小时后,我们观察到如下结果: ▲程序执行1小时后jmap的输出结果,显示超过2千5百万个CelleData类实例 现在有超过2千5百万个CelleData类实例,占用了超过1GB内存!我们可以确认这是一个内存泄露。 这类数据信息的好处是,不仅非常有用而且对于很大的JVM堆也能快速反馈结果。我曾经试过检测一个运行频繁并且占用17GB堆内存的程序,使用jmap能够在1分钟内生成程序的性能统计图。 需要注意的是,jmap不是运行分析工具,在生成统计图时JVM可能会暂停,因此当生成统计图时需要确认这种暂停对程序是可接受的。以我的经验,通常在调试一个严重bug时需要生成这种统计图,这种情况下,这些1分钟的暂停对程序来说是可接受的。这里,我们引出了下一个话题 - 半自动的运行分析工具VisualVM。 VisualVM 另一个包含于JVM中的工具是VisualVM,它的开发者将它描述为“一种集成了多个JDK命令行工具的可视化工具,它能为您提供轻量级的运行分析能力”。这样看来,VisualVM是另一种你最有可能用到的事后分析工具,一般是错误已出现或性能问题已经用传统方法(客户抱怨大多属于此类)发现。 继续之前的示例程序和它严重的内存泄露问题,在程序执行30分钟后,VisualVM帮我们绘制了如下图表: ▲图5:程序初始运行的VisualVM 内存图 从这个图表,我们可以清晰地看到截止到7:00pm,运行仅仅10分钟后,程序已经消耗掉超过1GB的堆空间。又过了23分钟,JVM已经到了它启动参数–Xmx3g最大值,导致程序响应缓慢,系统响应缓慢(持续的垃圾回收)和数量惊人的内存溢出错误。 借助jmap,我们定位了这种内存消耗攀升的原因。修复后,我们让程序重新运行于VisualVM的严格监测之下,观察到下面的情况: ▲图6:修复内存泄露问题后的VisualVM内存图 如你所见,程序的内存曲线(启动参数仍然为–Xmx3g)有了明显改善。 除了内存图像工具,VisualVM还提供了一个采样器和一个轻量级的剖析器(Profiler)。 VisualVM采样器能周期采样程序CPU和内存的使用情况。得到的统计数据类似jmap的反馈,此外,你还可以通过采样得到方法调用对CPU的占用情况。它让你能快速了解周期采样过程中的方法执行次数: ▲图7:VisualVM方法执
您可能关注的文档
- 平面设计个人工总作结.doc
- 平面设计个人简范历文.doc
- 平面组合图形的积面结算.doc
- 平面移动类技术势优介绍.doc
- 平面设计顶岗实报习告书.doc
- 年1000年产01000吨酸奶发酵工厂项目建议书质量.doc
- 平面设计师多年总的结.doc
- 年产1.5万吨烯丙腈合成工段工艺设计模版.doc
- 年产10000乳吨制品工厂设计.doc
- 年产5000吨淇冰淋工厂设计.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 心源性晕厥临床表现及护理.pptx VIP
- 食物不耐受IgG解读.pptx
- 2021 固态锂电池用固态电解质性能要求及测试方法 无机氧化物固态电解质.docx VIP
- 毕业论文(设计)小型混凝土搅拌机设计.doc VIP
- 人教版(2024)新教材八年级数学下册第20章20.1 勾股定理及其应用每课时教学设计汇编(含三个教学设计).docx VIP
- 2025CSCO前列腺癌诊疗指南更新解读(全文).pdf VIP
- 湘教版(2024)新教材八年级地理下册第六章第二节《东北地区的人口与城乡分布》精品教学设计.docx VIP
- 山西省2024年中考英语模拟试卷(含答案)2.pdf VIP
- 2025年食品安全国家标准-食品生产卫生规范GB14881培训考试试题及参考答案.docx VIP
- 语文 《红楼梦》阅读中“选择题”解题技巧阐释与训练 2024-2025学年统编版高一语文必修下册.docx VIP
原创力文档

文档评论(0)