美文网首页
Linux 申请内存失败解决方法

Linux 申请内存失败解决方法

作者: touch_The_Sky | 来源:发表于2018-10-14 20:23 被阅读0次

在linux上部署项目的时候可能会遇到这么一个错误

Native memory allocation (mmap) failed to map 1879048192 bytes for committing reserved memory

错误原因毫无疑问就是分配内存的时候内存不足,但是使用free 命令去查看系统的内存占用却发现此时还有很多内存可用.
再使用 ulimit -a 发现内存也并没有被限制.
什么原因呢?
我们最终还是在RedHat上找到了答案,需要优化系统性能或者深入了解RedHat系列的可以去看看:
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/html/performance_tuning_guide/

这其实涉及到系统的内存的申请策略问题,程序在启动的时候会先去申请内存,尽管不一定都会用的到那么多.
如果申请时发现无法申请到足够的内存就会报此错误. 而我们看到的那么多的内存为什么申请不到呢? 答案就是被别的程序申请占用了,尽管这些内存没有实际用到,却也无法再让另外的程序进行申请.
我们可以使用以下命令查看内存申请和可用情况

#CommitLimit 表示系统可申请的总内存
#Committed_AS为当前已经申请的内存
[root@localhost vm]# cat /proc/meminfo | grep Commit
CommitLimit:     3112228 kB
Committed_AS:     907096 kB

如果确定内存确实够用的话我们就可以改变overcommit_memory这个参数的值来保证我们的程序可以正常启动

overcommit_memory

此参数决定是否接受超大内存请求的条件。这个参数有三个可能的值:

  • 0 — 默认设置。内核执行启发式内存过量使用处理,方法是估算可用内存量,并拒绝明显无效的请求。遗憾的是因为内存是使用启发式而非准确算法计算进行部署,这个设置有时可能会造成系统中的可用内存超载。
  • 1 — 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。
  • 2 — 内存拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的。

解决方式:

  1. echo 1 > /proc/sys/vm/overcommit_memory
    此方式临时生效,系统重启后消失
  2. 编辑/etc/sysctl.conf ,添加vm.overcommit_memory=1,然后sysctl -p 使配置文件永久生效
    当然这是我们在开发环境下的解决方式, 在生产环境还是要尽量去优化调整JVM的参数来保证每个程序都有足够的内存来保证运行

相关文章

  • Linux 申请内存失败解决方法

    在linux上部署项目的时候可能会遇到这么一个错误 错误原因毫无疑问就是分配内存的时候内存不足,但是使用free ...

  • 嵌入式Linux驱动题

    嵌入式Linux驱动题 linux内核里面,内存申请有哪几个函数? kmalloc() __get_free_...

  • 2019-07-11

    linux 安装输入法失败的解决方法 安装sogoupinyin失败解决办法: 1.sudo su 2.dpkg ...

  • JVM-8-常用工具

    问题 linux查看进程的线程信息ps -T -p $pidtop -H -p $pidVIRT:申请内存RES:...

  • 堆内存和栈内存的区别

    基于c或c++的堆栈,操作系统为linux 堆内存和栈内存都是位于主存上的内存,为什么堆内存需要开发者申请、释放内...

  • Tomcat自停问题记录

    1、问题出现 tomcat无故自停,无异常日志。 2、查看Linux系统日志。 发现是内存不足 3、解决方法 a、...

  • nginx部署

    OpenSSL创建私有CA 重置ESC镜像,再次连接时,因为缓存问题会提示失败: 解决方法: linux 远程连接...

  • 双层flume搭建过程中遇到的坑

    解决方法:先将flume的JVM内存改为512M 请求超时,导致发送event失败解决:设置request-tim...

  • linux1.0版本mmap研究

    今天看go的runtime的时候,内存堆初始化的时候是调用mmap申请的虚拟内存,于是搜了下0.11的linux源...

  • 5.动态内存分配

    内存申请 动态申请的内存可以跨函数使用 内存影像 练习

网友评论

      本文标题:Linux 申请内存失败解决方法

      本文链接:https://www.haomeiwen.com/subject/amkwiftx.html