Datanode在JVM暂停时遇到问题

时间:2015-08-03 12:52:08

标签: java hadoop garbage-collection jvm cloudera-cdh

我在CDH 5.1.2上,我看到这个错误,其中一个datanode经常停顿。我从日志中看到了这一点。

 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容量正在减少一个节点。

2 个答案:

答案 0 :(得分:3)

  

GC pool' ConcurrentMarkSweep'有集合:count = 1 time = 12707ms

您正在使用CMS收集器遇到长时间的GC暂停。

要进一步调查,您应该通过@color-name打开GC日志记录,如果您还在使用java 7,还要添加-Xloggc:<path to gc log file> -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCDetails

GCViewer可以帮助您查看日志。

一旦找到原因,您可以尝试调整CMS以避免这些暂停。对于初学者,有official CMS tuning guide

答案 1 :(得分:0)

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

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

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

在我们的例子中,解决方案就像增加NameNode和Secondary NameNode服务的Java堆大小以及重新启动...一样简单,因为我们有1.5百万块,但只使用堆大小的默认1GB设置。在增加Java堆大小并重新启动HDFS服务之后,我们全面都是绿色的。

干杯!