首页 > 分享 > JDK1.6环境下,Cannot run program “...”: java.io.IOException: error=12, Cannot allocate memory

JDK1.6环境下,Cannot run program “...”: java.io.IOException: error=12, Cannot allocate memory

最新推荐文章于 2024-09-14 15:10:26 发布

hoverq 于 2019-03-14 20:20:53 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

背景:相册使用JDK1.6,每运行一段时间,相册的resin就会报错:Cannot run program "...": java.io.IOException: error=12, Cannot allocate memory。

项目通过shell命令调用了第三方图片处理工具gm

排查过程:

0、通过top查看系统的进程,以及大致剩余的内存量:出现问题时,空闲内存还有1G以上;

1、观察gm程序使用的内存状态:gm的内存使用量一般在60M以内,在5M~60M间波动;

2、手动执行gm命令,同时观察resin的输出:resin仍然提示无法调用gm命令,但手动执行是正常的;

3、查看了系统中的程序数量,打开的文件数,都正常;

4、无头绪时,找到了一个说法:linux JDK1.6环境,通过Runtime.getRuntime().exec()执行第三方的程序时,先会在机器进行一次fork,fork的对象是被调用程序的父进程。在这里,也就相当于相册在调用gm命令时,先会申请一个跟resin一样大的内存空间。而resin一般占用的内存还是挺多的,这样一来,就调用失败了。

这个问题在JDK1.7已经得到修正。

参考资料:

bug描述和解决方案

此bug推测和源码分析(其中copy-on-write的机制不一定准确)

官方说法

相关知识

no such file or directory
成功解决报错Cannot find class [com.alibaba.druid.pool.DruidDataSource] for bean with name ‘dataSource‘
Apache Tomcat/7.0.47
Operator '==' cannot be applied to错误
IIS 7.5 Detailed Error
cannot open resource self.font = core.getfont(font, size, index, encoding, layout
“找不到符号”或“无法解析符号”错误是什么意思?
nianhuiY/liuyi
ghx/线上花店管理系统
季圣华/管伊佳ERP

网址: JDK1.6环境下,Cannot run program “...”: java.io.IOException: error=12, Cannot allocate memory https://m.huajiangbk.com/newsview1076409.html

所属分类:花卉
上一篇: 控制医院后勤外包服务成本=少花钱
下一篇: 各长寿区域自然地理环境因素