怎么找到一个公司的网站,众筹网站建设,网站设计网站建设毕业文稿,wordpress商城插件java 堆转储快照堆转储是诊断与内存相关的问题的重要工件#xff0c;例如内存泄漏缓慢#xff0c;垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。 有很棒的工具#xff0c;例如Eclipse MAT和Heap Hero#xff0c;可以分析堆转储。 但是例如内存泄漏缓慢垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。 有很棒的工具例如Eclipse MAT和Heap Hero可以分析堆转储。 但是您需要为这些工具提供以正确的格式和正确的时间点捕获的堆转储。 本文为您提供了捕获堆转储的多个选项。 但是我认为前三个是有效的选择而其他三个则是个不错的选择。 1. jmap jmap打印堆转储到指定的文件位置。 该工具打包在JDK中。 可以在bin文件夹中找到它。 这是调用jmap的方法 jmap -dump:formatb,filefile-path pid where pid: is the Java Process Id, whose heap dump should be captured file-path: is the file path where heap dump will be written in to. 例 1个 jmap -dumpformat bfile / opt / tmp / heapdump.bin 37320 注意传递“实时”选项非常重要。 如果通过此选项则仅将内存中的活动对象写入堆转储文件。 如果未通过此选项则所有对象即使是准备好进行垃圾回收的对象也会打印在堆转储文件中。 它将大大增加堆转储文件的大小。 这也将使分析变得乏味。 为了解决内存问题或优化内存仅“ live”选项就足够了。 2. HeapDumpOnOutOfMemoryError 当应用程序遇到java.lang.OutOfMemoryError时理想的方法是立即捕获堆转储以诊断问题因为您想知道java.lang.OutOfMemoryError发生时位于内存中的对象以及它们占用的内存百分比。 但是由于当前的高温大多数情况下IT /运营团队会忘记捕获堆转储。 不仅如此他们还重新启动了应用程序。 如果不及时捕获堆转储就很难诊断出任何内存问题。 这就是该选项非常方便的地方。 在应用程序启动期间传递“ -XX HeapDumpOnOutOfMemoryError”系统属性时JVM将在JVM遇到OutOfMemoryError时捕获堆转储。 用法示例 1个 注意捕获的堆转储将在-XXHeapDumpPath系统属性指定的位置打印。 最佳实践 始终保持在所有应用程序中配置此属性因为您永远不知道何时发生OutOfMemoryError.jcmd3。 3. jcmd jcmd工具用于将诊断命令请求发送到JVM。 它打包为JDK的一部分。 可以在bin文件夹中找到它。 这是调用jcmd的方法 1个 例 1个jcmd 37320 GC.heap_dump /opt/tmp/heapdump.bin 4. JVisualVM JVisualVM是一个监视故障排除工具打包在JDK中。 启动此工具时您可以看到本地计算机上正在运行的所有Java进程。 您也可以使用此工具连接到在远程计算机上运行的Java进程。 脚步 在bin文件夹下启动jvisualvm 右键单击其中一个Java进程 单击下拉菜单上的“堆转储”选项 将生成堆转储 将在“摘要”选项卡“基本信息”“文件”部分中指定生成堆转储的文件路径。 图从JVisualVM捕获堆转储 5. JMX 有一个com.sun.management:typeHotSpotDiagnostic MBean 。 此MBean具有“ dumpHeap”操作。 调用此操作将捕获堆转储。 dumpHeap操作采用两个输入参数 outputFile应将堆转储写入的文件路径 live传递“ true”时仅捕获堆中的活动对象 您可以使用JMX客户端例如JConsole jmxsh和Java Mission Control来调用此MBean操作。 图使用Java Mission Control作为JMX客户端来生成堆转储 6.程序化方法 除了使用工具之外您还可以以编程方式从应用程序中捕获堆转储。 在某些情况下您可能希望基于应用程序中的某些事件来捕获堆转储。 这是Oracle的一篇好文章 通过调用com.sun.management:typeHotSpotDiagnostic MBean JMX Bean提供了从应用程序捕获堆转储的源代码我们在上述方法中对此进行了讨论。 7. IBM管理控制台 如果您的应用程序在IBM Websphere Application Server上运行则可以使用管理控制台来生成堆。 脚步 启动管理控制台 在导航窗格中单击故障排除 Java转储和核心 选择要为其生成堆转储的server_name 点击堆转储产生堆转储您指定的服务器 您也可以使用wsadmin生成堆转储。 翻译自: https://www.javacodegeeks.com/2019/10/7-options-to-capture-java-heap-dumps.htmljava 堆转储快照