Je lance une tâche via Docker sur ECS d'AWS. La tâche effectue des calculs qui sont liés au CPU, et que je voudrais exécuter en parallèle. Je démarre un pool de threads avec le nombre de threads spécifié dans Runtime.getRuntime().availableProcessors()
, ce qui fonctionne bien en local sur mon PC. Pour une raison quelconque, sur AWS ECS, cela retourne toujours 1, même s'il y a plusieurs cœurs disponibles. Par conséquent, mes calculs s'exécutent séquentiellement et n'utilisent pas les multiples cœurs.
Par exemple, en ce moment, j'ai une tâche qui s'exécute sur une instance "t3.medium" qui devrait avoir 2 cœurs selon la documentation.
Lorsque j'exécute le code suivant :
System.out.println("Java rapporte " +
Runtime.getRuntime().availableProcessors() + " cœurs");
Ensuite, ce qui suit s'affiche dans les logs :
Java rapporte 1 cœur
Je ne spécifie pas le paramètre cpu
dans la définition de tâche d'ECS. Je vois que dans la liste des tâches dans la console de gestion ECS, il y a une colonne "CPU" qui affiche 0 pour ma tâche. Je remarque également que dans la liste des instances (= VMs), il est indiqué "CPU disponible" comme 2048, ce qui a probablement quelque chose à voir avec le fait que la VM a 2 cœurs.
Je voudrais que mon programme Java voie tous les cœurs que la VM a à offrir. (Comme c'est normalement le cas lorsqu'un programme Java s'exécute sur un ordinateur sans Docker).
Comment puis-je faire cela ?