我尝试使用IBM CPLEX Java / OPL库解决ILP问题。 solve方法在if循环中运行,如果ILP出现问题(例如内存不足或不可行的解决方案),则返回false。
try {
Log.printLine("Starting CPLEX solve");
if (cplex.solve()) {
Log.printLine("CPLEX solved successfully, now processing result");
} else {
Log.printLine("Solution could not be achieved, probably insufficient memory or some other weird problem.");
}
} catch (IloException e) {
Log.printLine("Solution could not be achieved, probably insufficient memory or some other weird problem.");
e.printStackTrace();
} finally {
Log.printLine("just making sure we can reach this!");
}
问题在于,当我在具有44GB RAM的机器上运行java -Xmx24g -jar myjar.jar &
时,Ubuntu内核会在cplex.solve()方法中关闭我的ILP。我的syslog文件说Killed proces Java -Xmx24g -jar myjar.jar &
。出于某种原因,我的RAM使用率达到+ 44GB,这让我觉得这个ILP没有占用堆空间(那么是什么导致了这个巨大的内存使用?)。
此外,Ubuntu内核在完成求解之前或者在抛出OutOfMemory异常之前关闭了我的java进程。
我真的很喜欢我的ILP自然完成所以我可以保持程序运行,有谁知道如何配置Ubuntu或我的java参数以避免当前的Ubuntu行为?