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