Cette rubrique décrit les causes et les solutions aux échecs de création de processus sur une instance Elastic Compute Service (ECS) exécutant Alibaba Cloud Linux 2.
Symptômes
Lors de l'exécution de l'appel système fork ou clone sur l'instance, l'erreur -1 EAGAIN (Resource temporarily unavailable) apparaît et aucun nouveau processus ne peut être créé. Cet échec se manifeste de deux manières :
Échec des commandes shell : L'exécution de commandes shell renvoie le message
bash: fork: retry: No child processes.Échec spécifique à une application : La création de processus ou de threads échoue pour certaines applications, mais fonctionne normalement pour d'autres.
Causes
L'erreur EAGAIN se déclenche lorsque l'une des limites système suivantes est atteinte :
| Limite | Description | Commande de diagnostic |
|---|---|---|
| Limite de threads par utilisateur | Le nombre maximal de threads que l'utilisateur système peut créer est atteint. Cela provoque généralement un échec généralisé des commandes shell. | ulimit -u |
Limite spécifique à une application (app_limit) |
Le nombre de processus (nr_user_process) créés par l'utilisateur d'exécution pour une application donnée dépasse la limite supérieure de cette application. Seule l'application concernée est en échec. |
— |
Solution 1 : Augmenter la limite de threads pour l'utilisateur système
Appliquez cette solution lorsque les commandes shell échouent avec le message bash: fork: retry: No child processes.
Étape 1 : Identifier et arrêter les threads consommant trop de ressources
Identifiez les applications consommant le plus de threads.
-
Arrêtez toute application occupant un nombre excessif de threads. Remplacez
<PID>par l'ID de processus (PID) de l'application à arrêter.AvertissementLa commande
killtermine immédiatement les processus et peut entraîner une perte de données. Avant de l'exécuter, créez un snapshot de l'instance ou sauvegardez les fichiers critiques.kill -9 <PID>
Étape 2 : Augmenter la limite de threads
Remplacez <$Num_Of_Process> par la nouvelle valeur de limite.
ulimit -u <$Num_Of_Process>
Solution 2 : Augmenter la limite de ressources pour un processus spécifique
Recourez à cette solution lorsque seules certaines applications ne parviennent pas à créer des processus ou des threads.
-
(Facultatif) Si
util-linuxn'est pas installé, installez-le au préalable.yum install -y util-linux -
Définissez la limite de processus sur illimitée pour le processus cible. Remplacez
<$PID>par le PID du processus.prlimit --pid <$PID> --nproc=unlimitedCette modification prend effet immédiatement pour le processus en cours d'exécution, mais ne persiste pas après son redémarrage.