Linux 内存管理

  • Commit

英文单词,“交付”,在内存这里是指 内存交付

  • Overcommit

意味: 过度交付,是指内存过度交付

  • Linux程序如何申请内存(采用Overcommit策略)
Linux在分配内存的时候,一般会高于程序malloc()申请的内存,为了提高资源率,并不是所有程序申请了内存后不一定会用完。

具体测试如下:
Overcommit的策略
Linux下overcommit有三种策略(Documentation/vm/overcommit-accounting):
0. 启发式策略。合理的overcommit会被接受,不合理的overcommit会被拒绝。
1. 任何overcommit都会被接受。
2. 当系统分配的内存超过swap+N%*物理RAM(N%由vm.overcommit_ratio决定)时,会拒绝commit。
overcommit的策略通过vm.overcommit_memory设置。
overcommit的百分比由vm.overcommit_ratio设置。

# echo 2 > /proc/sys/vm/overcommit_memory
# echo 80 > /proc/sys/vm/overcommit_ratio
  • 申请不到内存会咋样
在Unix中,当一个用户进程使用malloc()函数申请内存时,假如返回值是NULL,则这个进程知道当前没有可用内存空间,就会做相应的处理工作。许多进程会打印错误信息并退出。

尤其是redis。 这个时候可以通过把 overcommit_memory的值调整为1 处理。
  • 什么情况下发生oom killer
当内存不足的时候会发生oomkiller。
  • 什么情况下,linux会认为内存不足?
  • 哪些程序会被oom kill掉

分数越高越有机会被干掉。

#!/bin/bash
for proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do
    printf "%2d %5d %s\n" \
        "$(cat $proc/oom_score)" \
        "$(basename $proc)" \
        "$(cat $proc/cmdline | tr '\0' ' ' | head -c 50)"
done 2>/dev/null | sort -nr | head -n 10

这里写图片描述

  • 听说oom的时候会出现kernel panic,会出现重启
# panic , 等待20s 系统重启
kernel.panic = 20
  • 参考

http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/
http://blog.51yip.com/nosql/1776.html
https://github.com/datawolf/learning-kernel/blob/master/source/mem-management.rst
http://www.vpsee.com/2010/08/reboot-linux-after-a-kernel-panic/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值