vm.overcommit_memory
vm.overcommit_memory = 0
vm.overcommit_memory = 1
vm.overcommit_memory = 2
0 默认设置,不允许普通用户overcommit, 但是允许root用户轻微的overcommit.
表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
遗憾的是因为内存是使用启发式overcommitting handle(会尽量减少swap的使用)而非准确算法计算进行部署,这个设置有时可能会造成系统中的可用内存超载。
1 允许overcommit
即允许分配所有的物理内存,而不管当前的内存状态如何。
使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。
2 不允许过度 overcommit
即允许分配超过所有物理内存和交换空间总和的内存
即拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的。
公式:CommitLimit = (Physical RAM * vm.overcommit_ratio / 100) + Swap
vm.overcommit_ratio
vm.overcommit_ratio = 90
默认为 50,为物理内存分配时的比例。
只有当 vm.overcommit_memory = 2 的时候才会生效
查看系统 overcommit 信息
# cat /proc/meminfo |grep -i commit
CommitLimit: 90971304 kB
Committed_AS: 64872556 kB
CommitLimit:最大能分配的内存(个人理解仅仅在vm.overcommit_memory=2时候生效),具体的值是
SWAP内存大小 + 物理内存 * overcommit_ratio / 100
Committed_AS:当前已经分配的内存大小