Linux内核修改内存分配策略

今天遇到了如下的内核报错

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f0e1e06c000, 65536, 1) failed; error='Cannot allocate memory' (errno=12)

这个报错是因为,linux会对大部分的内存资源申请都回复允许,以便于运行更多的程序。但是有些程序申请完内存后并不一定会立马使用,会持久化占用不释放,导致后续的服务,linux没有足够的内存提供给它,就会出现上面这个错误,这就叫做overcommit。这种程序常见的比如oracle的监控、hiveserver等这种持久化的程序

这个错误的解决方法除了加成本怼内存之外可以修改内存的分配策略,使得如果内存到了一定程度就直接拒绝了

策略修改在/etc/sysctl.conf文件中的vm.overcommit_memory配置项,它允许0到1三个配置

0:内核首先会检查是否有足够的内存分配,如果没有就反馈申请失败,也就是cannot allocate memory的出现,这是默认配置
1:内核允许超量使用内存直到内存用完为止
2:表示内核绝不允许超量使用内存,即分配出去的内存空间不能超过swap+50%的服务器总内存值

你也可以快捷修改

echo 0 > /proc/sys/vm/overcommit_memory
echo 50 > /proc/sys/vm/overcommit_ratio
sysctl -p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值