【发布时间】:2019-08-30 23:32:35
【问题描述】:
我正在 AWS 的 ECS 上通过 Docker 运行任务。该任务执行一些受 CPU 限制的计算,我想并行运行这些计算。我用Runtime.getRuntime().availableProcessors() 中指定的线程数启动了一个线程池,它在我的PC 上本地运行良好。出于某种原因,在 AWS ECS 上,这始终返回 1,即使有多个内核可用。因此我的计算是串行运行的,不使用多核。
例如,现在,我有一个任务在“t3.medium”实例上运行,根据docs,它应该有 2 个内核。
当我执行以下代码时:
System.out.println("Java reports " +
Runtime.getRuntime().availableProcessors() + " cores");
然后在日志中显示以下内容:
Java reports 1 cores
我没有在 ECS 的任务定义中指定cpu 参数。我看到在 ECS 管理控制台中的任务列表中,它有一个“CPU”列,我的任务读取为 0。我还注意到,在实例(= VM)列表中,它将“可用 CPU”列为 2048,这可能与 VM 有 2 个内核的事实有关。
我希望我的 Java 程序能够查看 VM 必须提供的所有内核。 (当 Java 程序在没有 Docker 的计算机上运行时通常会出现这种情况)。
我该怎么做?
【问题讨论】:
-
感谢@dokaspar - 已删除。
标签: java docker amazon-ecs