转:http://blog.csdn.net/chifengxin/article/details/6573134
Exception Trace:
In the Linux circumstance, when the program executes till this place:
Process p = Runtime.getRuntime().exec(cmdArr);
it throws an exception like this:
java.io.IOException: Cannot run program "/opt/X.sh": java.io.IOException: error=12, Cannot allocate memory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:474)
at java.lang.Runtime.exec(Runtime.java:610)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)
...
Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:467)
... 4 more
These are the status and environment for it:
Top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16405 root 19 0 6484m 5.1g 10m S 101 86.7 4:09.11 java
Free:
total used free shared buffers cached
Mem: 6108084 5616532 491552 0 2244 185100
-/+ buffers/cache: 5429188 678896
Swap: 2104472 12584 2091888
|
As shown before, the program has hold about 87% memory. When the memory usage is low, there is no exception throwed. It could be why java program fails to process “Runtime.exec()”.
The Official Explains:
Bug ID:
|
5049299
|
Votes
|
45
|
Synopsis
|
(process) Use posix_spawn, not fork, on S10 to avoid swap exhaustion
|
Category
|
java:classes_lang
|
Reported Against
|
5.0 , b06 , 1.4.2_04
|
Release Fixed
|
|
State
|
6-Fix Understood, request for enhancement
|
Priority:
|
2-High
|
Related Bugs
|
6381152 , 6605835 , 6728616 , 6745199 , 6845504 , 6850720 , 4343908 , 4391042
|
Submit Date
|
18-MAY-2004
|
Description
|
If you run a "small" program (e.g., a Perl script) from a "big" Java process on
a machine with "moderate" free swap space (but not as much as the big Java
process), then Runtime.exec() fails.
|
|
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5049299
|
Cause Detail:
This issue dues to the operating mechanism of “Runtime.exec” in Java.
In Java program, “ProcessBuilder.start” and “Runtime.exec” use fork() on *NIX system, which allocates the child process the same amount of memory as the parent process. This will double the used memory for a short time. So when the Java main process has used over 50% memory, it will absolutely never launch a child process using “Runtime.exec” successful, even the process needs almost no memory.
Solutions:
There are three workable solutions:
1. The middleware of Tanuki may solve this problem. The question is, it is complicated and also expensive.
See- http://wrapper.tanukisoftware.com/doc/english/child-exec.html
2. Separate the process using “Runtime.exec” from the main process into a new java process. So when the “Runtime.exec” is called ,it will only double the memory of the new process, using almost no memory.
which means:
a. When start/stop the main process, the “Runtime.exec” process should be started/stopped at the same time.
b. Add an independent socket in the main process to communicate with the new process. The exec command will be delivered to the new process to execute.
This will surely increase the complexity and maintenance of the system.
3. Update JDK1.6 to JDK1.7
This bug is fixed in JDK1.7 ,using new invoking mechanism of external program.
(Pipes be tested in JDK snapshot release: build 1.7.0-b147,passed with no exceptions; it also reduced the memory usage for about 20%)
This will need no modification for current source code.
Quote:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5049299
http://hi.baidu.com/lewutian/blog/item/3a60a2fa553f6115a9d31172.html
http://www.cnblogs.com/happyy/archive/2010/11/28/1890111.html
http://wrapper.tanukisoftware.com/doc/english/child-exec.html
相关推荐
在执行编译程序时,如果虚拟机的内存不足,可能会出现“Virtual Memory Exhausted: Cannot Allocate Memory”的错误提示。这是因为编译程序需要占用大量的内存空间,而虚拟机的内存不足以满足编译程序的需求。 解决...
12. configure: error: Missing libv4l2. It is highly recommended to build with libv4l2 headers and library. Many camera will won't work or will crash your application if libv4l2 is not installed. 错误...
标题中的"forge-bootstrap-2.0.0.Alpha7.zip"是一个软件开发框架的版本压缩包,Forge Bootstrap 提供了一个快速启动新项目的环境,通常包含了基本的项目结构、配置和依赖管理,使得开发者能够更便捷地搭建开发环境。...
[Serializable] public class EXIF { #region -- Class level members -- // Class level members. private Image _picture; #endregion #region -- Constructors -- // Constructors. ...
1>save-image-D435.obj : error LNK2001: 无法解析的外部符号 “private: char * __cdecl cv::String::allocate(unsigned __int64)” (?allocate@String@cv@@AEAAPEAD_K@Z) 1>save-image-D435.obj : error LNK2001: ...
跑模型时出现RuntimeError: CUDA out of memory.错误 查阅了许多相关内容,原因是:GPU显存内存不够 简单总结一下解决方法: 将batch_size改小。 取torch变量标量值时使用item()属性。 可以在测试阶段添加如下代码:...
7. al-:加强意义(例:allocate 分配) 8. am-:加强意义(例:almost 几乎) 9. an-:无,不(例:anarchistic 无政府的) 10. anti-:反对,相反,防止(例:antibiotics 抗生素) 词缀 词缀是英语单词中的一...
3.ACC error:avrd: IDL error:Unable to allocate memory:to make array Not enough space 解决方法是在高级设置里面(Advanced Settings),tile size:设置稍微大一些,如100~200m。 4.ACC error:avrd:No ...
昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条。。。。下面说一下几个解题步骤。。。。一般就是用下面...
- allocate(vt. 分配):指将资源、资金等指定用于特定目的。 - allowance(n. 津贴):给予个人的钱作为补贴或额外的收入。 - ally(n. 同盟):指与其他国家、团体或个人结成的伙伴关系。 - alongside(prep. ...
12. accessory: 附件,辅助设备。 13. achievevt.: 实现,完成(动词形式)。 14. ACK: 确认信号,即Acknowledge(确认)的缩写。 15. acoustic: 声音的,声学的。 16. acquire: 获得,获取。 17. acquisition: 获取...
3.ACC error:avrd: IDL error:Unable to allocate memory:to make array Not enough space。 解决方法是在高级设置里面(Advanced Settings),tile size:设置大一些,如 100~200m。 4.ACC error:avrd:No ...
1. 定期维护:执行磁盘清理、磁盘碎片整理等操作,保持系统的良好运行状态。 2. 数据备份:定期备份重要文件,以防系统崩溃时数据丢失。 3. 安全防护:安装可靠的防病毒软件,并保持更新,防止病毒和恶意软件入侵。 ...
Result := 'Failed to allocate output buffer.'; end; finally if hDevice <> INVALID_HANDLE_VALUE then CloseHandle(hDevice); FreeMem(lpInBuffer); FreeMem(lpDrvStatus); FreeMem(lpOutBuffer); end;...
23. allocate: 分配、配置,为对象或数据指定内存空间。 24. allocator: 分配器,内存分配机制或对象。 25. anglebracket: 尖括号,在编程中用于泛型声明。 26. annotation: 注解、评注,为代码添加元数据的语法结构...
DLL: When using J-Trace PRO with IAR EWARM a "failed to allocate x bytes of memory" error could occur. Fixed. DLL: Windows: Renesas RX: When using FINE interface and disabling ongoining debug mode on ...
error='Cannot allocate memory' (errno=12) There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (mmap) failed to map 1073741824 bytes for committing ...
12. 错误与异常(Errors and Exceptions): - accurate(adj. 精确的):没有偏差的,完全准确的。 - ambiguity(n. 含糊):有多种可能解释的模糊状态。 这份词汇表详细地罗列了这些与软件开发紧密相关的英语...
标题 "Cannot Allocate New Log" 指的是在数据库操作过程中遇到了无法分配新的日志空间的问题。这通常发生在事务日志(或重做日志)已满的情况下,导致系统无法记录更多的事务信息。日志文件是数据库系统的重要组成...
1. 库与应用程序交互:库开发者可能需要提供一种方式,让应用程序能够在特定时刻执行自定义操作,回调函数可以实现这一点。 2. 事件驱动编程:当某个事件发生时,回调函数会被调用,执行相应的处理逻辑。 3. 异步...