在linux环境中,当执行到
Process p = Runtime.getRuntime().exec(cmdArr);
时,打印如下错误:
java.io.IOException: Cannot run program "/opt/xxxx": java.io.IOException: error=12, Cannot allocate memory
有那位对linux环境比较熟悉的给点建议啊
Process p = Runtime.getRuntime().exec(cmdArr);
时,打印如下错误:
java.io.IOException: Cannot run program "/opt/xxxx": java.io.IOException: error=12, Cannot allocate memory
有那位对linux环境比较熟悉的给点建议啊
解决方案 »
- 谁可以帮我看看怎么才能实现图片的移动啊 谢谢 我是菜鸟 初学者
- 关于执行JAVA线程任务时出现异常后线程挂掉问题
- 各位大哥救命!JFreeChart的LegendTitle问题
- 熟悉swt的请进,如何使Ststem.out.println(...)这样的内容在swt中显示?
- Container.add(Container.java:518) 异常
- 键盘事件问题! 急
- accept()!
- 请问哪位知道如何将XML文件按照预定的格式导入到EXCEL中,或者哪里有这方面详细的文档资料.
- 帮我看一下
- 当数据库连接次数达到一定的时候,如果让要取得该连接的人来尝试三次连接呢?
- java对象行为问题,用户登陆属于用户对象的行为么
- java序列化问题
java.io.IOException: Cannot run program "/opt/XXX": java.io.IOException: error=12, Cannot allocate memory
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)。。
Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory
at java.lang.UNIXProcess.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 4 more此时top查看内存利用率接近90%,但按理应该还有空间可以执行
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8925 root 19 0 6489m 5.1g 10m S 100 86.8 9:17.22 javafree结果如下:
total used free shared buffers cached
Mem: 6108084 5759972 348112 0 46108 249956
-/+ buffers/cache: 5463908 644176
Swap: 2104472 0 2104472
此bug是由于在JDK1.6以前版本,Runtime.exec调用外部程序时使用fork()方式,需要分配和当前Java主进程同等大小的内存空间,也就是说将当前占用内存加倍。因此当Java程序占用内存超过50%时执行Runtime.exec永远不能成功。
解决方法:
1、新起一个Java进程,通过socket与主进程通信。这样运行Runtime.exec时只会将新进程内存加倍。
2、坐等JDK1.7发布。该bug在JDK1.7中被Fix。http://blog.csdn.net/chifengxin/archive/2011/06/28/6573134.aspx