【问题标题】:Analyze the killed java process in hadoop cluster分析hadoop集群中被杀死的java进程
【发布时间】:2018-03-06 13:02:16
【问题描述】:

Java 程序正在 Hadoop 集群中执行。它在执行过程中出现 OutOfMemoryError 并且进程停止。我想分析被杀死的 java 进程的内存和其他细节。 我在哪里可以找到被杀死的进程日志文件? 我使用 sar 实用程序来分析内存,但它只显示系统内存而不是进程内存。

【问题讨论】:

    标签: java mapreduce mapr


    【解决方案1】:

    您可以使用-XX:ErrorFile=<your location>/hs_err_pid<pid>.log 作为JVM 参数来设置hs_error 文件位置。

    【讨论】:

    • 谢谢吉安。我现在添加它。如果 java 进程完成,错误日志的默认位置是什么。
    • 默认情况下,它位于tmp 位置,如/tmp/hadoop-hadoop/mapred/local/userlogs/job_201802111641_0059/attempt_201802111641_0059_r_000001_1/stdout。但问题是tmp 位置经常被清理。
    【解决方案2】:

    首先,也许您的 JVM 没有为您的应用程序配置足够的堆大小。

    也就是说,根据我的经验,我有一点建议。我认为您应该启用这些标志来调查哪些对象占用了太多空间。

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=path
    

    第一个标志将在 OOM 异常的情况下转储堆,第二个标志将设置 JVM 保存该转储文件的路径。

    获取堆转储文件后,您应该使用内存分析工具 (https://www.eclipse.org/mat/) 来查看可能由应用程序引起的内存泄漏。

    此外,测量 GC 过程很重要,您可以使用这些标志来执行此操作。

    -XX:+PrintReferenceGC 
    -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps - 
    XX:+PrintTenuringDistribution -XX:+PrintAdaptiveSizePolicy 
    -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -
    Xloggc:/some/where/gc.log
    

    GC.log 可以使用这个在线工具进行分析

    http://gceasy.io/

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2017-01-23
      • 2013-04-07
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多