我正在运行我编写的一个 Java 程序,它调用 Gurobi(一种线性程序优化软件)。当我运行一个需要大约 20 小时才能完成的大型程序时,即使是简单的任务(例如在 Chrome 中打开新选项卡)也需要 5-10 秒。我编写的 Java 程序是一个单线程应用程序,但 Gurobi 使用多个内核。我的电脑是运行 OS X 10.7 的 iMac,它有 4 个 CPU 内核。
我希望能够运行大型计算,同时仍然能够在计算机上进行正常工作。
问题:
- 我如何检查哪个是瓶颈:CPU 还是内存?
- 是否可以让 Java 使用单个 CPU 运行,以便计算机速度不会急剧下降?
- 如何减少大量计算对计算机正常可用性的影响?
更新:nice
通过告诉 Gurobi 仅使用单个 CPU 核心并赋予其低优先级, 我能够使大型计算在后台顺利运行。
答案1
首先确定问题是什么。实际上是 Java/Gurobi 占用 CPU 的问题,还是 CPU 没问题,但它使用了几乎所有的内存?还是 I/O 受限?
如果是 CPU 限制,请检查 unix 命令“好的“ 和 ”雷尼塞“或设置CPU 亲和性。
如果它使用了所有内存,则尝试将 Java 配置为使用更少的内存(或购买更多 RAM)。(请参阅这篇文章在或姊妹网站上如何做到这一点)。
如果它是 I/O 密集型的,那么要么给它一个自己的磁盘(例如将数据存储在第二个 HDD 或 U 盘上),要么加快磁盘访问速度(例如通过使用 SSD),要么以某种方式设置 I/O 优先级。我不知道如何在 OSX 上执行后者。