1 回答
TA贡献1789条经验 获得超8个赞
如果您启动大量线程,它们绝对会被调度到多个内核。这个答案只是关于返回正确的值。许多“线程池”启动的线程数与该方法返回的线程数一样多:它应该返回可用的内核数。Runtime.getRuntime().availableProcessors()
似乎有两个主要的解决方案,两者都不是理想的:
在任务定义中设置参数。例如,如果您有 2 个内核,并且想要同时使用它们,则必须在任务的定义中进行设置。这不是很方便,原因有两个:
cpu
"cpu":2048
如果选择更大的实例,则必须确保更新此参数。
如果您希望同时运行两个任务,这两个任务都可以偶尔使用所有核心进行短期活动,AWS 不会在具有 的 2 核系统上安排两个任务。它说从CPU的角度来看,VM是“满”的。这违背了分时(Unix等)的理念,即每个任务都采用它需要的东西(例如,想象一下,在台式PC上,如果你在双核计算机上运行Word和Excel,而Windows不允许你启动任何其他任务,理由是Word可能需要所有一个核心,而Excel也可能这样做, 因此,如果另一个程序可能同时需要所有内核,则没有足够的内核。
"cpu":2048
在 JDK 10 及更高版本中使用 JVM 选项,如此处所述。这并不方便,因为:
-XX:ActiveProcessorCount=xx
如上所述,如果您更改实例类型,则必须更改该值。
我写了一篇更长的博客文章,在这里描述了我的发现:https://www.databasesandlife.com/java-docker-aws-ecs-multicore/
添加回答
举报