public class Example {
public static void main(String[] args) {
// print statement at the start of the program
System.out.println("Start...");
System.out.print("Number of available processors are: ");
System.out.println( Runtime.getRuntime().availableProcessors());
}
}
参考编号:https://www.tutorialspoint.com/get-number-of-available-processors-in-java
当我在AWS ECS Fargate上编译并运行此代码时;1〃;作为输出,即使我在taskdef中指定了超过1个cpu(4098表示4vCPU(。
经过测试的Java版本:
- 更正-17.0.03.5.1
- 更正-8.275.01.1
但是当我在docker内部的AWS EC2上通过为";docker run";我得到了我传递给cpus的确切数字。与Containerd的AWS EC2结果相同。
还通过设置CPU限制在EKS 1.18中测试了这一点。它返回在CPU限制中指定的CPU数量。
所以,想知道为什么"1〃;仅在AWS ECS中。
我假设您使用Console来创建任务定义,因为我看到了相同的行为(但没想到(。文件上写着:
尽管您也可以在容器级别为Fargate任务指定CPU和内存,但这是可选的。大多数用例都是通过在任务级别上指定这些资源来满足的
我首先创建了一个任务定义,在任务级别指定CPU/内存。当我运行它时,我看到了与您相同的输出,这就是任务定义的样子(省略了不相关的信息(:
"taskDefinition": {
"containerDefinitions": [
{
"name": "example",
"image": ".../example:latest",
"cpu": 0,
}
],
"cpu": "4096",
"memory": "8192",
}
请注意,容器CPU为0。
然后,我在容器定义中编辑了CPU,并在运行任务时看到了预期的可用处理器数量。当我检索到任务定义时,它看起来是这样的:
"taskDefinition": {
"containerDefinitions": [
{
"name": "example",
"image": ".../example:latest",
"cpu": 4096,
}
],
"cpu": "4096",
"memory": "8192",
}
我还没有尝试过使用CloudFormation或Terraform来创建任务定义,看看它是否有什么不同。我让在ECS控制台上发送反馈。