今天早上,收到Zabbix的报警,hadoop-new-5的三个进程datanode,tasktracker和hbase都挂掉了。
于是登陆到该服务器,首先Copy log,然后启动服务。
接着对log进行查看,发现三个进程都是在服务器时间18:47分左右挂掉的,而log文件中都是在没有关联的ERROR与WARN的情况下突然中止的。
因此在log中并未找到原因,于是查看Zabbix中服务器的资源情况统计,发现内存比较吃紧,最低的时候Free memory不足18M,不过目前其它几个Hadoop服务器的内存情况也基本一致。
于是查看系统日志,发现了对应的线索。
# dmesg | grep java
由于JVM的Out of memory 导致了操作系统执行kill指令杀掉了所有Java进程。
===========
…
[8288555.635268] Out of memory: kill process 1533 (java) score 207630 or a child
[8288555.635288] Killed process 1533 (java) vsz:830520kB, anon-rss:318624kB, file-rss:4632kB
[8288555.889317] Killed process 14847 (java) vsz:1763768kB, anon-rss:565000kB, file-rss:4644kB
[8288555.924976] Killed process 15014 (java) vsz:1368968kB, anon-rss:123004kB, file-rss:4668kB
[8288556.044819] Out of memory: kill process 15301 (java) score 8269 or a child
[8288556.044833] Killed process 15301 (java) vsz:1455372kB, anon-rss:1115116kB, file-rss:4368kB
==========
于是,考虑是否能够通过JVM调优来做一些优化,目前服务器上总共有5个这样的java进程,每个进程仅设置了heap size,未作GC方面的调优。
# ps aux | grep java
java -Dproc_tasktracker -Xmx1000m -Dhadoop.log.dir=/usr/lib/hadoop-0.20/logs … r org.apache.hadoop.mapred.TaskTracker
过去我有过与Redhat公司负责JBoss支持的工程师的网上直接交流(购买了RHN服务),得到过一些针对GC优化的建议,效果显著。
但在我查看了目前Hadoop服务器的CPU之后,感到有些无奈,目前的Hadoop服务器是单核CPU,而GC优化的核心思想是利用多核的特征实现并行GC。
因此在现有的服务器硬件条件上难以做好JVM的相关调优。
# cat /proc/cpuinfo
===========
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R) Xeon(R) CPU E5645 @ 2.40GHz
…
因此,针对目前的服务器情况,应该在适当的时候考虑将服务器升级到多核CPU版本,和增加更多的内存了。
近期评论(Recent Comments)
感谢提供解决问题的思路。我的情况是因为文件有损坏,使用hotcopy 会出现“svnadmin: Can't open file '/SVN_PATH/db/revprops/24/24685'...
大神,您好。 你的博客 都是使用什么软件和主题搭建的哈?关注你的博客很久了。 也想自己搭建一个 总结 反思自己。谢谢大神...
int result = 0; for (int i = 0; i < 101; i++) { result ^= data[i]; ...
如果确认所有的表都是INNODB引擎,没有任何MyISAM表,还可以加上--no-lock参数。...
讲的不错, mark
答案无疑是本地端口转发了,它的命令格式是: ssh -L :: 原来是这个原理...
博主您好,我想咨询你一个问题,我现在想实现这样一个需求: haproxy 本身提供ssl 证书,后面的web 服务器走正常的http 协议 就是ssl证书就放在前端的haproxy上,后端4...