Как решить «java.io.IOException: ошибка = 12, не удается выделить память», вызывая Runtime # exec ()?
В моей системе я не могу запустить простое Java-приложение, которое запускает процесс. Я не знаю, как решить. Не могли бы вы дать мне подсказки, как решить? Программа:
[[email protected] sisma-acquirer]# cat prova.java import java.io.IOException; public class prova < public static void main(String[] args) throws IOException < Runtime.getRuntime().exec("ls"); >>
[[email protected] sisma-acquirer]# javac prova.java && java -cp . prova Exception in thread "main" java.io.IOException: Cannot run program "ls": 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) at prova.main(prova.java:6) Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory at java.lang.UNIXProcess.(UNIXProcess.java:164) at java.lang.ProcessImpl.start(ProcessImpl.java:81) at java.lang.ProcessBuilder.start(ProcessBuilder.java:467) . 4 more
[[email protected] sisma-acquirer]# java -version java version "1.6.0_0" OpenJDK Runtime Environment (IcedTea6 1.5) (fedora-18.b16.fc10-i386) OpenJDK Client VM (build 14.0-b15, mixed mode) [[email protected] sisma-acquirer]# cat /etc/fedora-release Fedora release 10 (Cambridge)
EDIT: решение Это решает мою проблему, я не знаю точно, почему: echo 0 > /proc/sys/vm/overcommit_memory Up-votes для тех, кто может объяснить:) Дополнительная информация, верхний вывод:
top - 13:35:38 up 40 min, 2 users, load average: 0.43, 0.19, 0.12 Tasks: 129 total, 1 running, 128 sleeping, 0 stopped, 0 zombie Cpu(s): 1.5%us, 0.5%sy, 0.0%ni, 94.8%id, 3.2%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1033456k total, 587672k used, 445784k free, 51672k buffers Swap: 2031608k total, 0k used, 2031608k free, 188108k cached
[[email protected] sisma-acquirer]# free total used free shared buffers cached Mem: 1033456 588548 444908 0 51704 188292 -/+ buffers/cache: 348552 684904 Swap: 2031608 0 2031608
Это либо ошибка в версии для Linux, либо у вас есть проблемы с привилегиями. Вы можете заглянуть в UnixProcess: 164 в источнике, чтобы узнать, что он пытается выделить.
Я разместил ссылку на бесплатную библиотеку, которая решает вашу проблему, но модератор удалил мой ответ без объяснения причин. В интересах сообщества я еще раз попробую в качестве комментария: Ваша проблема с памятью решается с помощью Yajsw, который в Linux использует вызовы библиотеки C для создания процесса. Читайте об этом здесь: sourceforge.net/projects/yajsw/forums/forum/810311/topic/…
Я сталкивался с этим с openjdk, после того как я заменил его на официальный sun jdk, разветвление работает нормально . Если вы не хотите заменять openjdk, хак ‘overcommit_memory’ также работает
IOException while executing runtime.exec
posted 15 years ago
I am trying to execute one shell script from another folder using below mentioned code
it is throwing IOException, ca you please tell me if I am doing something wrong.
posted 15 years ago
Are you handling the input and output streams of the process you started correctly? See this article for how to do it.
posted 15 years ago
please find my code attached below
I am getting following exception
java.io.IOException: No such file or directory
at 0x0000002a95b6c946: java.lang.Throwable.Throwable(java.lang.String) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b60039: java.lang.Exception.Exception(java.lang.String) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b73379: java.io.IOException.IOException(java.lang.String) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b4f67b: java.lang.ConcreteProcess.startProcess(java.lang.String[], java.lang.String[]) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c78c7e: java.lang.ConcreteProcess.ConcreteProcess(java.lang.String[], java.lang.String[]) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b6308e: java.lang.Runtime.exec(java.lang.String[], java.lang.String[]) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b62fee: java.lang.Runtime.exec(java.lang.String, java.lang.String[]) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b62f4c: java.lang.Runtime.exec(java.lang.String) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c92d74: ffi_call_UNIX64 (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c92ba4: ffi_call (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c9223f: ffi_java_raw_call (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b39755: _Jv_InterpMethod.continue1(_Jv_InterpMethodInvocation) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b39ede: _Jv_InterpMethod.run(ffi_cif, void, ffi_raw, _Jv_InterpMethodInvocation) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b37d3a: _Jv_InterpMethod.run_normal(ffi_cif, void, ffi_raw, void) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c922b6: ?? (. 0)
at 0x0000002a95c92ca9: ffi_closure_UNIX64_inner (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c92e5c: ?? (. 0)
at 0x0000002a95c92d74: ffi_call_UNIX64 (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c92ba4: ffi_call (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c9223f: ffi_java_raw_call (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b39755: _Jv_InterpMethod.continue1(_Jv_InterpMethodInvocation) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b39ede: _Jv_InterpMethod.run(ffi_cif, void, ffi_raw, _Jv_InterpMethodInvocation) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b37d3a: _Jv_InterpMethod.run_normal(ffi_cif, void, ffi_raw, void) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c922b6: ?? (. 0)
at 0x0000002a95c92ca9: ffi_closure_UNIX64_inner (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95c92e5c: ?? (. 0)
at 0x0000002a95b49e75: gnu.gcj.runtime.FirstThread.call_main() (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95bb06a8: gnu.gcj.runtime.FirstThread.run() (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b55225: _Jv_ThreadRun(java.lang.Thread) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000002a95b278b8: _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib/../lib64/libgcj.so.3)
at 0x0000000000400be2: ?? (. 0)
at 0x0000002a9648f197: __libc_start_main (/lib64/tls/libc.so.6)
at 0x00000000004009aa: ?? (. 0)