Datanode 遇到 JVM 暂停问题

问题描述 投票:0回答:3

我使用的是 CDH 5.1.2,我经常看到此错误,其中一个数据节点经常暂停。我从日志中看到这一点。

 WARN org.apache.hadoop.util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 12428ms
GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=12707ms

知道为什么我会看到这个吗?每隔一段时间,hdfs 容量就会下降一个节点。

java hadoop garbage-collection jvm cloudera-cdh
3个回答
3
投票

GC 池“ConcurrentMarkSweep”已收集:计数=1 时间=12707ms

您正在经历 CMS 收集器的长时间 GC 暂停。

要进一步调查,您应该通过

-Xloggc:<path to gc log file> -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
打开 GC 日志记录,如果您使用的是 java 7,还可以添加
-XX:+PrintGCCause

GCViewer 可以帮助可视化日志。

找到原因后,您可以尝试调整 CMS 以避免这些暂停。对于初学者来说,有官方 CMS 调整指南


3
投票

我们刚刚在运行 CDH 5.3.2 时遇到了一个非常类似的问题,我们无法在 Hadoop 集群上成功启动 HDFS NameNode 服务。

当时非常令人困惑,因为除了 WARN org.apache.hadoop 之外,我们没有在 /var/log/messages 和 /var/log/hadoop-hdfs/NAMENODE.log.out 中观察到任何明显的错误.util.JvmPauseMonitor:检测到 JVM 或主机暂停(例如 GC)

与 Cloudera 支持合作后,我们能够确定我们遇到了未记录的 OOM 异常...作为一般经验法则,请查看堆大小的配置...对于每 1百万块您应该至少有 1GB 的堆大小。

在我们的例子中,解决方案非常简单,只需增加 NameNode 和辅助 NameNode 服务的 Java 堆大小并重新启动...,因为我们有 150 万个块,但仅使用默认的 1GB 堆大小设置。 增加 Java 堆大小并重新启动 HDFS 服务后,我们全面恢复正常。

干杯!


0
投票

您还可以通过转到 etc/hadoop/hadoop-env.sh 并取消注释该行来打开 GC 收集日志

export HDFS_NAMENODE_OPTS

enter image description here

此选项的好处是,有文档以及其他一些选项可以帮助调试文件内此选项的问题。

© www.soinside.com 2019 - 2024. All rights reserved.