运行大量计算导致我的计算机延迟

运行大量计算导致我的计算机延迟

我正在运行我编写的一个 Java 程序,它调用 Gurobi(一种线性程序优化软件)。当我运行一个需要大约 20 小时才能完成的大型程序时,即使是简单的任务(例如在 Chrome 中打开新选项卡)也需要 5-10 秒。我编写的 Java 程序是一个单线程应用程序,但 Gurobi 使用多个内核。我的电脑是运行 OS X 10.7 的 iMac,它有 4 个 CPU 内核。

我希望能够运行大型计算,同时仍然能够在计算机上进行正常工作。

问题:

  1. 我如何检查哪个是瓶颈:CPU 还是内存?
  2. 是否可以让 Java 使用单个 CPU 运行,以便计算机速度不会急剧下降?
  3. 如何减少大量计算对计算机正常可用性的影响?

更新:nice通过告诉 Gurobi 仅使用单个 CPU 核心并赋予其低优先级, 我能够使大型计算在后台顺利运行。

答案1

首先确定问题是什么。实际上是 Java/Gurobi 占用 CPU 的问题,还是 CPU 没问题,但它使用了几乎所有的内存?还是 I/O 受限?

如果是 CPU 限制,请检查 unix 命令“好的“ 和 ”雷尼塞“或设置CPU 亲和性

如果它使用了所有内存,则尝试将 Java 配置为使用更少的内存(或购买更多 RAM)。(请参阅这篇文章在或姊妹网站上如何做到这一点)。

如果它是 I/O 密集型的,那么要么给它一个自己的磁盘(例如将数据存储在第二个 HDD 或 U 盘上),要么加快磁盘访问速度(例如通过使用 SSD),要么以某种方式设置 I/O 优先级。我不知道如何在 OSX 上执行后者。

答案2

首先你应该确定瓶颈是什么,你可以使用操作系统活动监视器查看系统资源使用情况,并确定导致使用率最大化和速度变慢的原因。

为了减少 CPU 使用率,OS X 上有一个名为好的,它允许您设置进程的调度优先级。尝试使用以下命令调用 Gurobi:

nice -n 20 Gurobi

Gurobi您尝试运行的程序的可执行文件的路径在哪里。

设置-n 20将把 Gurobi 设置为您计算机上最低的调度优先级。这将导致执行时间更长,但这意味着其他进程将响应更快。您可以将值修改为-n-20 到 20 之间,其中 20 是最低优先级,-20 是最高优先级,因此您可以随意调整它。

相关内容