• 1
  • 2
  • 3
  • 4
  • 5
Linux操作系统运维问题 首 页  »  帮助中心  »  云服务器  »  Linux操作系统运维问题
ECS Linux内核参数 overcommit_memory取值含义
发布日期:2015-12-16 14:12:17

  问题描述:不小心更改了一下 /proc/sys/vm/overcommit_memory=2,现在登录不了。

  问题解答:overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1和2。

  1、如果取值为0,系统在为应用进程分配虚拟地址空间的时候,就会判断当前申请的虚拟地址空间大小是否超过剩余内存大小,如超过,则虚拟地址空间分配失败。因此,如进程本身占用的虚拟地址空间较大或剩余内存较小时,malloc、fork等调用也许会失败。

  2、如果取值为1,系统在为应用进程分配虚拟地址空间的时候,完全不进行限制,这种情况下,避免了fork可能产生的失败,但由于malloc是先分配虚拟地址空间,而后通过异常陷入内核分配真正的物理内存,在内存不足的情况下,这相当于完全屏蔽了应用进程对系统内存状态的感知,即malloc总是能成功,一旦内存不足,会引起系统OOM杀进程,应用程序对于这种后果是无法预测的。

  3、如果取值为2,系统内存状态确定了虚拟地址空间的上限,进程的虚拟地址空间占用在很多情况下远大于其实际占用的物理内存,这样一旦内存使用量上去以后,对于一些动态产生的进程(需要复制父进程地址空间)则很容易创建失败,如果业务过程没有过多的这种动态申请内存或创建子进程,则影响不大,否则会产生比较大的影响。

  请注意:一般是在使用redis 会调整这个参数为1.默认情况下都是0。