在 Blob 存储中收集堆转储以调试和分析 Hadoop 服务

堆转储包含应用程序的内存快照,其中包括创建转储时各变量的值。 因此,它们在诊断发生在运行时的问题时很有用。 可以自动收集 Apache Hadoop 服务的堆转储,并将其放置在用户的 Azure Blob 存储帐户中的 HDInsightHeapDumps/ 下。

必须为各个群集上的服务启用各种服务的堆转储集合。 默认为群集关闭此功能。 这些堆转储可能很大,因此在启用收集后,建议监视保存这些转储的 Blob 存储帐户。

Important

Linux 是 HDInsight 3.4 或更高版本上使用的唯一操作系统。 有关详细信息,请参阅 HDInsight 在 Windows 上停用。 本文中的信息仅适用于基于 Windows 的 HDInsight。 有关基于 Linux 的 HDInsight 的信息,请参阅为基于 Linux 的 HDInsight 上的 Apache Hadoop 服务启用堆转储

符合启用堆转储的服务

可以启用以下服务的堆转储:

  • Apache hcatalog - tempelton
  • Apache hive - hiveserver2、metastore、derbyserver
  • mapreduce - jobhistoryserver
  • Apache yarn - resourcemanager、nodemanager、timelineserver
  • Apache hdfs - datanode、secondarynamenode、namenode

用于启用堆转储的配置元素

若要为服务启用堆转储,需要在该服务的节(由 service_name 指定)中设置相应的配置元素。

"javaargs.<service_name>.XX:+HeapDumpOnOutOfMemoryError" = "-XX:+HeapDumpOnOutOfMemoryError",
"javaargs.<service_name>.XX:HeapDumpPath" = "-XX:HeapDumpPath=c:\Dumps\<service_name>_%date:~4,2%%date:~7,2%%date:~10,2%%time:~0,2%%time:~3,2%%time:~6,2%.hprof"

service_name 的值可以是此处列出的任何服务:tempelton、hiveserver2、metastore、derbyserver、jobhistoryserver、resourcemanager、nodemanager、timelineserver、datanode、secondarynamenode 或 namenode。

使用 Azure PowerShell 启用

例如,要使用 Azure PowerShell 为 jobhistoryserver 启用堆转储,可以使用以下脚本:

Important

使用 Azure Service Manager 管理 HDInsight 资源的 Azure PowerShell 支持已弃用,已在 2017 年 1 月 1 日删除。 本文档中的步骤使用的是与 Azure Resource Manager 兼容的新 HDInsight cmdlet。

请按照 Install and configure Azure PowerShell (安装和配置 Azure PowerShell)中的步骤安装最新版本的 Azure PowerShell。 如果脚本需要修改才能使用与 Azure Resource Manager 兼容的新 cmdlet,请参阅迁移到适用于 HDInsight 群集的基于 Azure Resource Manager 的开发工具,了解详细信息。

$MapRedConfigValues = new-object 'Microsoft.WindowsAzure.Management.HDInsight.Cmdlet.DataObjects.AzureHDInsightMapReduceConfiguration'

$MapRedConfigValues.Configuration = @{ "javaargs.jobhistoryserver.XX:+HeapDumpOnOutOfMemoryError"="-XX:+HeapDumpOnOutOfMemoryError" ; "javaargs.jobhistoryserver.XX:HeapDumpPath" = "-XX:HeapDumpPath=c:\\Dumps\\jobhistoryserver_%date:~4,2%_%date:~7,2%_%date:~10,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%.hprof" }

使用 .NET SDK 启用

例如,要使用 Azure HDInsight .NET SDK 为 jobhistoryserver 启用堆转储,可以使用以下代码:

clusterInfo.MapReduceConfiguration.ConfigurationCollection.Add(new KeyValuePair<string, string>("javaargs.jobhistoryserver.XX:+HeapDumpOnOutOfMemoryError", "-XX:+HeapDumpOnOutOfMemoryError"));

clusterInfo.MapReduceConfiguration.ConfigurationCollection.Add(new KeyValuePair<string, string>("javaargs.jobhistoryserver.XX:HeapDumpPath", "-XX:HeapDumpPath=c:\\Dumps\\jobhistoryserver_%date:~4,2%_%date:~7,2%_%date:~10,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%.hprof"));