Linux错误:页面分配失败和解决方案

时间:2020-01-09 10:41:50  来源:igfitidea点击:

问题描述:如何消除显示为"页面分配失败"的错误消息?

解决方法:内存管理由Linux内核完成。
虚拟内存系统将进程使用的内存地址与实际物理地址分开,从而允许进程分离并使用磁盘交换增加有效可用的RAM量。
虚拟内存管理器的质量可能会对整体系统性能产生很大影响。
此错误与内存碎片有关,即由于碎片问题无法将新作业/进程加载到内存中。
要解决此问题,请尝试以下所有操作:

  • 将内核升级到最新版本

使用sysctl或者/etc/sysctl.conf文件设置VM内核变量。
/proc/sys/vm用于虚拟内存子系统。
您需要设置以下两个变量:

  • vm.lower_zone_protection = N:如果也不运行32位hugemem内核,则可以尝试将/proc/sys/vm/lower_zone_protection的值设置为250或者更大。这将导致内核尝试更积极地防御低区域以免分配可能在高内存区域中分配的内存。据我所知,该选项直到2.6.x内核才可用。
  • vm.vfs_cache_pressure = N:控制内核回收内存的趋势,该内存用于缓存目录和inode对象。在默认值vfs_cache_pressure = 100的情况下,内核将尝试以公平的速度就页面缓存和swapcache回收来回收目录项对象(dentry)和索引节点(inode)。减小vfs_cache_pressure会导致内核倾向于保留dentry和inode缓存。将vfs_cache_pressure增加到100以上会导致内核更喜欢回收目录项对象(dentry)和索引节点(inode)。
  • 对于具有4GiB或者更大RAM的32位系统,请考虑使用具有几乎4GB低内存区域的hugemem内核。

内核2.6.x的/etc/sysctl.conf示例

vm.lower_zone_protection=100
vm.vfs_cache_pressure=200