您的位置:首页 > 运维架构

Hadoop 类僵尸进程的定期处理

2011-12-15 23:17 323 查看

问题定义:

Hadoop由于对系统的进程管理的缺陷,会有些Hadoop mapred Child 进程一直存留在系统中,占有大量的CPU或者内存,影响整个系统的性能。因此需要定期清理Hadoop的进程。通过观察我们发现实际上并非僵尸进程,因此我们把持续运行超过特定天数(此处为14天)的进程杀掉。

脚本如下:

ps -e -o pid -o etime -o args |grep org.apache.hadoop.mapred.Child |grep -v grep |awk '{ if (int(substr($2,1,index($2,"-")-1))>14) {print $1;} }' | xargs -t kill -9

 注:etime   ELAPSED   elapsed time since the process was started, in the form [[dd-]hh:]mm:ss.

在解决此问题时的一些其它思路:

# 比如用ps找到cpu占用超过某个数目,同时累积CPU时间超过某个数目来确定要kill掉的进程。

for i in `ps aux |grep org.apache.hadoop.mapred.Child |grep Aug |awk '{printf "%d\n", $10}'`
do
if [ `ps aux |grep $i |grep Aug |awk '{printf "%d\n", $10}'` -gt "200000" ]
then
if [ `ps auxf |grep $i |grep Aug |awk '{printf "%d\n", $3}'` -gt "100" ]
then
echo $i
kill -9 $i
fi
fi
done

 把脚本放在crontab里,定时执行即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop kill 脚本