fatal error: runtime: cannot map pages in arena address space

问题描述:

本人运行在阿里云ecs服务器上的程序最近连续不定期崩溃。错误日志打印为fatal error:  runtime:  cannot map pages in arena address space或者fatal error: runtime: failed to commit pages,都是显示内存崩溃的问题。但查看任务管理器,内存占用仅为3点多G,服务器配置是Windows server2008 r2 64位 8G内存。明明空闲多半内存,但程序依旧奔溃。最开始是程序启动时(用的revel 框架写的服务器),热编译提示内存不足,关闭部分在运行程序腾出内存空间后可正常编译运行。最近是程序运行时会崩溃。无奈只能硬着头皮查找原因。

网上遇到类似问题的解答大致有如下。

1,32位系统,仅支持最大4g内存,解决方法自然是换64位系统

2,程序构建版本是32位(本人用的golang语言程序64位,这个解答本人未证实是否真有影响)

3.系统限制单进程内存申请,这个通常在程序启动时弹错误out of memory,修复方法是cmd运行"Bcdedit /set IncreaseUserVa 3072"最后参数为限制的内存大小。

4.物理内存过小,同时虚拟内存过小,解决方法是加大物理内存或加大虚拟内存设置。

本人遇到的情况,上述原因均可排除。于是在下就头大了。只能各种尝试。写了个简单的测试程序,单纯循环申请内存,逐步扩大内存占用。复现了此程序错误,系统内存一旦用量达到3.8g左右,程序就gg。

后来在下思考,既然你不让我用物理内存,但我内存肯定是要用的,那我就只能设置虚拟内存了。因为此时系统是未设置虚拟内存的,理论上来讲,物理内存足够的情况下是不需要设置虚拟内存的,虚拟内存的出现就是为了解决物理内存不足的情况。

当我设定完虚拟内存后,奇迹出现了。利用测试程序,任务管理器显示物理内存终于突破了4g。至此,问题得以解决。

总结,Windows个坑爹货,为何一定要设置虚拟内存才能正常申请物理内存。使用Windows服务器的还是设置一下吧,避免和我一样掉坑,阿里云ecs默认是禁用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值