最近新采购的一批机器,由于intel cpu体系架构的改变,新机器的系统需要升级,选择了CentOS 6.2系统。

1  在新机器上将MR业务开启后,导致整个集群都反应很慢,运行的job几乎都被卡住;通过ganglia监控发现,机器的system cpu超过30%,机器几乎是满负载的情况。

原因分析:

RHEL 6.2和6.3系统中包含了一个新特性,被称为“transparent hugepage compaction”,它和Hadoop负载不能很好的交互。相比于其他的操作系统,这导致了严重的性能损失。Red Hat会在未来的更新中解决此问题。

解决方法:把如下命令增加到开机启动中。


echo always > /sys/kernel/mm/redhat_transparent_hugepage/enabled        
         echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag



2  解决上述问题,把MR业务开启一段时间后,经常出现某个task卡死的情况,job会一直hang住,查看TT日志


2013         -         08         -         20         06         :         12         :         31         ,         050         INFO org.apache.hadoop.mapred.TaskLogsTruncater: Initializing logs' truncater          with         mapRetainSize=-         1         and reduceRetainSize=-         1        
         2013         -         08         -         20         06         :         12         :         31         ,         053         FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError: unable to create          new         native         thread        
                  at java.lang.Thread.start0(Native Method)        
                  at java.lang.Thread.start(Thread.java:         640         )        
                  at org.apache.hadoop.mapred.ReduceTask$ReduceCopier.fetchOutputs(ReduceTask.java:         1932         )        
                  at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:         382         )        
                  at org.apache.hadoop.mapred.Child$         4         .run(Child.java:         270         )        
                  at java.security.AccessController.doPrivileged(Native Method)        
                  at javax.security.auth.Subject.doAs(Subject.java:         396         )        
                  at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:         1157         )        
                  at org.apache.hadoop.mapred.Child.main(Child.java:         264         )



从上面的日志看,是OOM的错误,不能创建新的进程。但查看该TT机器,内存充足,应该不是内存导致的问题。

/etc/security/limits.d/90-nproc.conf设置生效。


[hdfs@hd0447-sw40 ~]$ cat /etc/security/limits.d/         90         -nproc.conf        
         # Default limit          for         number of user's processes to prevent        
         # accidental fork bombs.        
         # See rhbz #         432903         for         reasoning.        
                  
         *          soft    nproc              1024



 

在处理hadoop前期环境的时候,发现有些机器在没有业务的情况下机器负载很高的情况,这里也记录一下。

1. 通过top命令发现plymouthd进程cpu负载达到近100%

解决方法:打开 /boot/grub/menu.lst , 去掉 “rhgb quiet”这两个参数 ,然后重启

2.power_saving死锁引起的高负载

解决方法:

方法1:rmmod acpi_pad,重启机器,机器将不支持电源节能;

方法2:在BIOS中开启ACPI支持,重启,更新内核至2.6.32-358.2.1.el6.x86_64;

方法3:在BIOS里设置禁用;

/etc/modprobe.d/blacklist.conf,然后添加blacklist acpi_pad。

开始使用方法1,解决了大多数机器power_saving死锁的问题,有些机器的整体负载还是会保持在10%以上,查看后发现还有部分power_saving进程,采用方法4,问题得以解决。

 

参考资料:

  1. http://serverfault.com/questions/356962/where-are-the-default-ulimit-values-set-linux-centos
  2. https://www.linuxwind.org/html/power_saving-thread-deadlock.html
  3. http://en.community.dell.com/support-forums/servers/f/1466/p/19456558/20387384.aspx