Ubuntu 内核由于内存不足终止了 CPLEX ILP 进程
Ubuntu kernel kills CPLEX ILP process due to out of memory
我正在 Java 中使用 ILOG CPLEX 库来解决 ILP 问题。我使用的是默认设置,没有调整任何参数。我使用了我在主循环示例中在线找到的示例代码:
if (cplex.solve()) {
Log.printLine("CPLEX solved successfully");
} else {
Log.printLine("probably insufficient memory or some other weird problem.");
}
我在具有 24GB RAM 的 Ubuntu 14 系统上启动了我的 jar,让它解决了更大的问题。当我的问题变得太大而无法使用 24GB RAM 解决时,我希望 CPLEX 从 solve 方法中得到 return false。相反,我的 CPLEX 会无休止地保持 运行,直到我的内核终止进程。我通过检查 kern.log:
验证了这一点
Nov 6 00:21:47 node0 kernel: [3779722.641458] Out of memory: Kill process 3600 (java) score 980 or sacrifice child
Nov 6 00:21:47 node0 kernel: [3779722.641476] Killed process 3600 (java) total-vm:36562768kB, anon-rss:23969732kB, file-rss:688kB
这是我第一次使用 CPLEX,我想知道如何才能让 CPLEX 在内存不足时 return false 解决方法(而不是让系统资源)?
我尝试在线查找并找到一些关于 WorkMem 和 TreeLimit 参数的 C++ 线程,但我无法找到如何使用 Java 库配置它们。
有人能帮我进一步吗?谢谢
编辑:这是 CPLEX 日志
Found incumbent of value 5000.000000 after 0.09 sec. (48.51 ticks)
Tried aggregator 1 time.
MIP Presolve eliminated 600000 rows and 1 columns.
MIP Presolve modified 156010 coefficients.
Reduced MIP has 171010 rows, 770000 columns, and 3170000 nonzeros.
Reduced MIP has 770000 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 5.54 sec. (2155.22 ticks)
Probing time = 5.51 sec. (186.83 ticks)
Tried aggregator 1 time.
Reduced MIP has 171010 rows, 770000 columns, and 3170000 nonzeros.
Reduced MIP has 770000 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 3.68 sec. (1438.46 ticks)
Probing time = 3.45 sec. (181.50 ticks)
Clique table members: 263821.
MIP emphasis: balance optimality and feasibility.
MIP search method: dynamic search.
Parallel mode: deterministic, using up to 4 threads.
Root relaxation solution time = 43.34 sec. (14019.88 ticks)
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap
0+ 0 5000.0000 0.0000 100.00%
0 0 4547.0452 14891 5000.0000 4547.0452 20 9.06%
0 0 4568.6089 12066 5000.0000 Cuts: 6990 318432 8.63%
它一直持续到内核杀死它。
要更改 WorkMem 参数,您需要这样做:
IloCplex cplex = new IloCplex();
cplex.setParam(IloCplex.Param.WorkMem, 2048);
请参阅 TreeLimit and MIP.Strategy.File 的文档。在调查这个问题时,我在 TreeLimit 文档中发现了一个小问题。它在那里提到了 128MB(WorkMem 的旧默认值),但它应该是 2048MB。正在修复。
您可以在 CPLEX 附带的示例中找到许多关于如何更改参数的示例(例如 MIPex3.java 等,这些示例可以在示例子目录中找到)。
有关详细信息,请参阅 running out of memory。
此处的所有链接均适用于 CPLEX 12.6.2,但如果您安装了其他软件,您应该能够 select 知识中心中不同版本的文档。
我正在 Java 中使用 ILOG CPLEX 库来解决 ILP 问题。我使用的是默认设置,没有调整任何参数。我使用了我在主循环示例中在线找到的示例代码:
if (cplex.solve()) {
Log.printLine("CPLEX solved successfully");
} else {
Log.printLine("probably insufficient memory or some other weird problem.");
}
我在具有 24GB RAM 的 Ubuntu 14 系统上启动了我的 jar,让它解决了更大的问题。当我的问题变得太大而无法使用 24GB RAM 解决时,我希望 CPLEX 从 solve 方法中得到 return false。相反,我的 CPLEX 会无休止地保持 运行,直到我的内核终止进程。我通过检查 kern.log:
验证了这一点Nov 6 00:21:47 node0 kernel: [3779722.641458] Out of memory: Kill process 3600 (java) score 980 or sacrifice child
Nov 6 00:21:47 node0 kernel: [3779722.641476] Killed process 3600 (java) total-vm:36562768kB, anon-rss:23969732kB, file-rss:688kB
这是我第一次使用 CPLEX,我想知道如何才能让 CPLEX 在内存不足时 return false 解决方法(而不是让系统资源)?
我尝试在线查找并找到一些关于 WorkMem 和 TreeLimit 参数的 C++ 线程,但我无法找到如何使用 Java 库配置它们。
有人能帮我进一步吗?谢谢
编辑:这是 CPLEX 日志
Found incumbent of value 5000.000000 after 0.09 sec. (48.51 ticks)
Tried aggregator 1 time.
MIP Presolve eliminated 600000 rows and 1 columns.
MIP Presolve modified 156010 coefficients.
Reduced MIP has 171010 rows, 770000 columns, and 3170000 nonzeros.
Reduced MIP has 770000 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 5.54 sec. (2155.22 ticks)
Probing time = 5.51 sec. (186.83 ticks)
Tried aggregator 1 time.
Reduced MIP has 171010 rows, 770000 columns, and 3170000 nonzeros.
Reduced MIP has 770000 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 3.68 sec. (1438.46 ticks)
Probing time = 3.45 sec. (181.50 ticks)
Clique table members: 263821.
MIP emphasis: balance optimality and feasibility.
MIP search method: dynamic search.
Parallel mode: deterministic, using up to 4 threads.
Root relaxation solution time = 43.34 sec. (14019.88 ticks)
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap
0+ 0 5000.0000 0.0000 100.00%
0 0 4547.0452 14891 5000.0000 4547.0452 20 9.06%
0 0 4568.6089 12066 5000.0000 Cuts: 6990 318432 8.63%
它一直持续到内核杀死它。
要更改 WorkMem 参数,您需要这样做:
IloCplex cplex = new IloCplex();
cplex.setParam(IloCplex.Param.WorkMem, 2048);
请参阅 TreeLimit and MIP.Strategy.File 的文档。在调查这个问题时,我在 TreeLimit 文档中发现了一个小问题。它在那里提到了 128MB(WorkMem 的旧默认值),但它应该是 2048MB。正在修复。
您可以在 CPLEX 附带的示例中找到许多关于如何更改参数的示例(例如 MIPex3.java 等,这些示例可以在示例子目录中找到)。
有关详细信息,请参阅 running out of memory。
此处的所有链接均适用于 CPLEX 12.6.2,但如果您安装了其他软件,您应该能够 select 知识中心中不同版本的文档。