• 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。

最新文章

  1. 混合 Data Warehouse 和 Big Data 倉庫的新架構
  2. IOS开发基础知识--碎片23
  3. SharpPcap网络包捕获框架的使用--实例代码在vs2005调试通过
  4. 使用MicroService4Net 快速创建一个简单的微服务
  5. drdb
  6. msys2安装
  7. jquery 调用函数时加()和不加()的执行顺序是不同的
  8. DirectShowLib directshownet 视频
  9. 把GAE程序通过SSH部署到 VPS
  10. c# 基本值类型及其默认值
  11. ArrayBlockingQueue
  12. SpringMVC控制器与视图的数据交换
  13. CSS之简单树形菜单
  14. IOS xib生成界面和代码生成界面两种方式混合
  15. [C和指针] rearrange.c
  16. TCP的流量控制
  17. 隐式intent启动电子邮件,不需要非电子邮件应用程序。
  18. Python虚拟环境virtualenv
  19. luogu 3413 SAC#1 - 萌数
  20. 51 nod 1610 路径计数(Moblus+dp)

热门文章

  1. 题解 CF383C 【Propagating tree】
  2. 【Henu ACM Round#20 E】Star
  3. 使用安卓手机连接win7的热点
  4. 总结C#保留小数位数
  5. css3 列表图片hover左右滚动效果
  6. ajax处理错误(六)
  7. DotNetCore2.1 下Docker使用的学习
  8. 推荐《深入浅出深度学习原理剖析与python实践》PDF+代码
  9. 【Henu ACM Round#16 D】Bear and Two Paths
  10. Python学习笔记3:简单文件操作