环境:
im4java-1.4.0 + GraphicsMagick-1.3.17 ,CentOS操作系统
异常信息如下:
Caused by: java.io.IOException: Cannot run program "gm": java.io.IOException: error=12, 无法分配内存
at java.lang.ProcessBuilder.start(ProcessBuilder.java:471)
at org.im4java.process.ProcessStarter.startProcess(ProcessStarter.java:407)
at org.im4java.process.ProcessStarter.run(ProcessStarter.java:312)
at org.im4java.core.ImageCommand.run(ImageCommand.java:215)
... 50 more
Caused by: java.io.IOException: java.io.IOException: error=12, 无法分配内存
at java.lang.UNIXProcess.<init>(UNIXProcess.java:265)
at java.lang.ProcessImpl.start(ProcessImpl.java:112)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:464)
... 53 more
查看内存:
-bash-3.2$ free -m
total used free shared buffers cached
Mem: 1978 1965 12 0 3 221
-/+ buffers/cache: 1741 237
Swap: 1027 1027 0
分析:
物理内存基本被用光了,free 还有12M,cached 还有221M,Swap 还有0M 。一台机器上运行了很多其它程序,内存是被其它程序占用的,如WebSphere。
解决:
加内存来不及,还要去采购,所以只加大了Swap的空间,再也没有报错。
常见异常总结:
java.io.IOException: error=12, 无法分配内存
java.io.IOException: error=2, No such file or directory
java.io.IOException: error=24, Too many open files