zoukankan      html  css  js  c++  java
  • Linux 内存管理与系统架构设计

    • Linux 提供各种模式(比如,消息队列),但是最著名的是 POSIX 共享内存(shmem,shared memory)。
      • Linux provides a variety of schemes (such as message queues), but most notable is POSIX shared memory (shmem).

    1. memory overcommit 与内存管理

    理解Linux的memory overcommit

    • Linux 下的内存管理会影响 Linux 下的 C 代码在内存分配(malloc)时的执行情况:
    • Memory Overcommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memory overcommit,有多少就分配多少,再申请就没有了,这其实有些浪费内存,因为进程实际使用到的内存往往比申请的内存要少,比如某个进程malloc()了200MB内存,但实际上只用到了100MB,按照UNIX/Linux的算法,物理内存页的分配发生在使用的瞬间,而不是在申请的瞬间,也就是说未用到的100MB内存根本就没有分配,这100MB内存就闲置了。
      • commit(或overcommit)针对的是内存申请,内存申请不等于内存分配,内存只在实际用到的时候才分配。
      • 也即有了 overcommit,内存的分配即是一种 lazy memory allocation;
      • 如果在使用过程中,真的超出可用的内存大小,Linux设计了一个OOM killer机制(OOM = out-of-memory)来处理这种危机:挑选一个进程出来杀死,以腾出部分内存,如果还不够就继续杀…也可通过设置内核参数 vm.panic_on_oom 使得发生OOM时自动重启系统。
    • overcommit 参数配置:
      • Linux 2.6之后允许通过内核参数 vm.overcommit_memory 禁止memory overcommit(也可通过 /proc/sys/vm/overcommit_memory)。内核参数 vm.overcommit_memory 接受三种取值:
        • 0 – Heuristic overcommit handling. 这是缺省值,它允许overcommit,但过于明目张胆的overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法(对该算法的详细解释请看文末)猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。
        • 1 – Always overcommit. 允许overcommit,对内存申请来者不拒。
        • 2 – Don’t overcommit. 禁止overcommit。
  • 相关阅读:
    ios MD5大小写加密
    清理xcode缓存
    iOS 动画(基于Lottie封装)
    wkWebView 的一些问题
    ios 画板的使用
    redis安装和使用
    memcached 配置与安装
    mysql主从同步配置
    ansible playbook使用
    ubuntu18创建rc.local
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421470.html
Copyright © 2011-2022 走看看