7

我的操作系统是arch linux 64位。

free -m 结果如下

             缓存的已用空闲共享缓冲区总数
电话:32172 31909 262 0 119 13054
-/+ 缓冲区/缓存:18735 13436
交换:258 258 0
ulimit -a
核心文件大小(块,-c)无限制
数据段大小 (kbytes, -d) 无限制
调度优先级 (-e) 20
文件大小(块,-f)无限制
待处理信号 (-i) 257329
最大锁定内存 (kbytes, -l) 64
最大内存大小 (kbytes, -m) 无限制
打开文件 (-n) 1024
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程 (-u) 257329
虚拟内存 (kbytes, -v) 无限制
文件锁 (-x) 无限制

内核选项 overcommit_memroy 为 0

但是当我尝试使用 malloc 分配 2G 字节时,我失败了,原因是:无法分配内存?

4

1 回答 1

3

实际上,它可以是任何东西。它以前可能工作过,因为空闲内存都是连续的,而现在空闲内存不是,或者可能是您的内存请求未能使用正在使用的启发式方法。

在此处查看此链接 - http://linuxtoolkit.blogspot.com/2011/08/tweaking-linux-kernel-overcommit.html - 了解有关过度使用的更多信息。

基本上:

  • 0 = 系统试探性地确定是否允许过量使用
  • 1 = 总是过度使用(即使超出地址范围,如果你问我,这很愚蠢)
  • 2 = 永远不要过度使用过去的某些约束
于 2012-11-12T08:57:43.453 回答