Namenode报 failed; error=‘Cannot allocate memory‘ (errno=12)
  RYmpRWGwj3Hm 2023年11月22日 34 0

因为我的CDH平台用的是虚拟机跑的,上面部署的服务太多了,在重启namenode以后出现down的状态,一直起不来,后来查看error日志,报以下错误:

Namenode报 failed; error=‘Cannot allocate memory‘ (errno=12)


一、解决办法:

由于报错os::commit_memory(0x00000000fec00000, 20971520, 0),但是经检查内存充足,于是判断是系统内存分配策略的问题,做以下修改

修改前:

Namenode报 failed; error=‘Cannot allocate memory‘ (errno=12)_重启

修改后:

Namenode报 failed; error=‘Cannot allocate memory‘ (errno=12)_内存分配策略_02

[root@hadoop_zxy bin]# sysctl -p
kernel.sem = 250 64000 100 512
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.default.arp_filter = 1
net.core.netdev_max_backlog = 10000
vm.overcommit_memory = 1
vm.max_map_count = 262144

二、测试

Namenode报 failed; error=‘Cannot allocate memory‘ (errno=12)_重启_03

三、扩展

vm.overcommit_memory配置

linux系统会对大部分的申请都回复yes,以便于运行更多的程序。但是有些程序申请完内存后并不一定会立马使用,这就叫做overcommit。

而通过vm.overcommit_memory的配置就可以控制overcommit的内存分配策略,主要分为以下三种:

0:内核首先会检查是否有足够的内存分配,如果没有就反馈申请失败,也就是cannot allocate memory的出现

1:内核允许超量使用内存直到内存用完为止

2:表示内核绝不允许超量使用内存,即系统的内存空间不能超过swap+50%的RAM值,50%是overcommit_ratio的默认值,该参数支持修改

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月22日 0

暂无评论

推荐阅读
  OTv2suKwXC7a   2023年11月28日   15   0   0 hive重启hive重启
  uBACcm3oHgm7   2023年11月19日   21   0   0 hive重启hive重启
  Eq2vNAPeTkpV   2023年11月24日   20   0   0 hive重启hive重启
RYmpRWGwj3Hm
最新推荐 更多

2024-05-03