vm.overcommit_memory和vm.overcommit_ratio

有两台新配的服务器内存128G,但在空余内存还有20G,page cache 60G时jps启动不了,提示java heap space,c中调用malloc无法分配5G以上的内存,很奇怪。

倒是在网上有看到显卡没装风尚导致该问题的,最后换了一个带风扇的显卡就解决的:

 http://ubuntuforums.org/showthread.php?p=11649751

后来同事问了运帷,原来时系统参数overcommit_memory和overcommit_ratio搞的鬼。

grep -i commit /proc/meminfo

看到CommitLimit和Committed_As参数。

CommitLimit是一个内存分配上限,CommitLimit = 物理内存 * overcommit_ratio(默认50,即50%) + swap大小

Committed_As是已经分配的内存大小。

overcommit_memory参数就是控制分配内存是否可以超过CommitLimit,默认是0,即启发式的overcommitting handle,会尽量减少swap的使用,root可以分配比一般用户略多的内存。1表示允许超过CommitLimit,2表示不允许超过CommitLimit。

原来这种怀疑系统参数有问题的诊断一般就是比较和正常机器的sysctl.conf配置,下次要先比较避免武断下结论。。


参考: http://bkeep.blog.163.com/blog/static/12341429020123795827876/

你可能感兴趣的:(内存分配)