Cette rubrique décrit les codes d'état et les erreurs courantes renvoyés lors de l'appel d'un service.
Descriptions des codes d'état
|
Code d'état |
Description |
|
200 |
Le service a traité la requête avec succès. |
|
400 |
Le format du corps de la requête est incorrect ou une exception s'est produite dans le code du processeur personnalisé. Remarque
Si le code de votre processeur personnalisé génère une exception, le serveur renvoie un code d'état 400. Pour différencier cette erreur des autres, configurez votre processeur personnalisé afin qu'il renvoie un code d'état spécifique en cas d'exception. |
|
401 |
L'authentification du service a échoué. Pour plus d'informations, consultez Échec de l'autorisation 401. |
|
404 |
Service introuvable. Pour plus d'informations, consultez 404 Introuvable. |
|
405 |
Méthode non autorisée. Par exemple, le serveur renvoie une erreur 405 si vous envoyez une requête POST à un serveur qui ne prend en charge que les requêtes GET. Essayez d'utiliser une autre méthode HTTP. |
|
408 |
Délai d'attente de la requête dépassé. Le serveur applique un délai d'attente par défaut de 5 secondes pour chaque requête. Vous pouvez configurer ce paramètre en définissant le champ Remarque
Le temps de traitement total d'une seule requête inclut le temps de calcul du processeur, le temps de réception des paquets de données réseau et tout temps passé en attente dans une file d'attente. |
|
429 |
La requête a déclenché une limitation de débit.
|
|
450 |
|
|
499 |
Le client a fermé la connexion. Lorsqu'un client ferme activement une connexion, il ne reçoit pas le code d'état 499. En revanche, le serveur enregistre toutes les requêtes non traitées provenant de cette connexion avec un code d'état 499. Par exemple, si un client dispose d'un délai d'attente HTTP de 30 ms et que la latence de traitement côté serveur est de 50 ms, le client abandonne la requête après 30 ms et ferme la connexion. Un code d'état 499 apparaît alors dans la surveillance côté serveur. |
|
500 |
Erreur interne du serveur. Le serveur a rencontré une condition inattendue qui l'a empêché de satisfaire la requête. |
|
501 |
Non implémenté. Le serveur ne prend pas en charge la fonctionnalité requise pour satisfaire la requête. |
|
502 |
Mauvaise passerelle. Le serveur, agissant en tant que passerelle ou proxy, a reçu une réponse invalide d'un serveur en amont. |
|
503 |
Service indisponible. Lorsque vous accédez à un service via une passerelle, si toutes les instances de service backend ne sont pas dans un état prêt, la passerelle renvoie un code d'état 503. Pour plus d'informations, consultez 503 aucun upstream sain. |
|
504 |
Délai d'attente de la passerelle. Pour plus d'informations, consultez Délai d'attente 504. |
|
505 |
Version HTTP non prise en charge. Le serveur ne prend pas en charge la version du protocole HTTP utilisée dans la requête. |
Codes d'erreur d'appel SDK
Lors de l'utilisation du SDK EAS officiel pour appeler un service, le SDK peut générer ses propres codes d'erreur, qui peuvent différer de ceux renvoyés par le serveur. Fiez-vous toujours aux codes d'erreur présents dans les journaux de la passerelle et du service comme source de vérité.
|
Code d'état |
Description |
|
512 |
Lors de l'utilisation du SDK EAS Golang, si le client se déconnecte activement, le SDK renvoie un code d'erreur 512. Ce délai d'attente côté client correspond à un code d'état 499 côté serveur. |
Erreurs courantes
404 Introuvable
Une erreur 404 indique généralement un chemin de requête invalide, un corps de requête incorrect ou une API non prise en charge par le service. Utilisez les scénarios suivants pour résoudre les problèmes en fonction du message d'erreur spécifique que vous recevez.
Type d'erreur 1 : {"object":"error","message":"The model `` does not exist.","type":"NotFoundError","param":null,"code":404}
Type d'erreur 2 : {"detail":"Not Found"}
Type d'erreur 3 : L'appel au point de terminaison /v1/models de BladeLLM renvoie 404: Not Found.
Type d'erreur 4 : La page de débogage en ligne renvoie une erreur 404 sans autre information.
Type d'erreur 5 : Un appel API vers ComfyUI renvoie « 404 not found page ».
400 Requête incorrecte
Le format du corps de la requête est incorrect. Vérifiez attentivement le format du corps de la requête, tel que la structure JSON, les noms des champs et les types de données.
Échec de l'autorisation 401
Le jeton d'authentification est manquant, incorrect ou utilisé de manière inadéquate. Vérifiez les points suivants :
-
Vérifiez si le jeton est correct. Sur la page Overview du service, cliquez sur View Invocation Information dans la section Basic Information.
RemarquePar défaut, le service génère automatiquement le jeton d'authentification. Vous pouvez également spécifier un jeton personnalisé et le mettre à jour lors des mises à jour du service.
-
Vérifiez si le jeton est correctement défini.
Si vous utilisez la commande
curl, ajoutez le jeton au champAuthorizationdans l'en-tête HTTP. Par exemple :curl -H 'Authorization: NWMyN2UzNjBiZmI2YT***' http:// xxx.cn-shanghai.aliyuncs.com/api/predict/echo.Si vous utilisez un SDK pour accéder au service, appelez la fonction
SetToken()correspondante. Pour plus d'informations, consultez Instructions pour l'utilisation du SDK Java.
Délai d'attente 504
Le serveur, agissant en tant que passerelle ou proxy, n'a pas reçu de réponse dans les délais impartis d'un serveur en amont. Cela signifie généralement que l'inférence du modèle prend trop de temps. Pour résoudre ce problème :
Dans votre code client, augmentez le délai d'attente de la requête HTTP.
Pour les tâches de longue durée, utilisez le mode EAS Queue Service (appel asynchrone), conçu pour gérer les tâches d'inférence par lots ou de longue durée.
450 : Requête rejetée car la file d'attente est pleine
Lorsqu'une instance de calcul côté serveur reçoit une requête, elle place d'abord la requête dans une file d'attente. Lorsqu'un worker de l'instance devient disponible, il récupère les données de la file d'attente pour traitement. Le nombre par défaut de workers est de 5, que vous pouvez ajuster en utilisant le champ metadata.rpc.worker_threads dans le fichier JSON de création d'un service. Si le temps de traitement des workers est trop long, les requêtes peuvent s'accumuler dans la file d'attente. Lorsque la file d'attente est pleine, l'instance rejette immédiatement les nouvelles requêtes avec un code d'état 450 pour éviter qu'une mise en file d'attente excessive n'augmente la latence et ne rende le service indisponible. La longueur par défaut de la file d'attente est de 64, que vous pouvez ajuster en utilisant le champ metadata.rpc.max_queue_size dans le fichier JSON de création d'un service.
La limitation de la longueur de la file d'attente agit également comme une forme de limitation de débit pour empêcher les pics de trafic de provoquer une défaillance en cascade du service.
Solutions :
Si vous recevez un petit nombre de codes d'état 450, vous pouvez réessayer la requête. Étant donné que les instances côté serveur sont indépendantes, une nouvelle tentative pourrait être acheminée vers une instance moins chargée, rendant le problème transparent pour le client. Cependant, ne réessayez pas indéfiniment, car cela irait à l'encontre de l'objectif de la protection par limitation de débit.
Si toutes les requêtes renvoient un code d'état 450, cela peut indiquer que le code à l'intérieur du processeur est bloqué. Si tous les workers sont en interblocage (deadlock) lors du traitement des requêtes et ne récupèrent plus les données de la file d'attente, vous devez déboguer le code du processeur pour trouver le bug.
503 aucun upstream sain
Vous recevez une erreur 503 avec le message « no healthy upstream » lors du débogage en ligne :

Résolvez le problème comme suit :
Vérifiez l'état de l'instance. Si l'instance s'est arrêtée, redémarrez le service.
-
Si l'état du service est Running, l'instance peut manquer de ressources, telles que CPU, mémoire ou mémoire GPU, ce qui entraîne un manque d'espace tampon.
Si vous utilisez des ressources publiques, essayez d'effectuer l'appel à nouveau pendant les heures creuses, ou passez à une spécification de ressource ou à une région différente.
Si vous utilisez une ressource dédiée (groupe de ressources EAS), assurez-vous que le groupe de ressources a réservé suffisamment de CPU, de mémoire et de mémoire GPU pour l'instance. Nous recommandons de laisser au moins 20 % des ressources libres comme tampon.
Un autre scénario courant est que l'état du service est Running et que toutes les instances sont Ready après le déploiement. Cependant, une requête déclenche un bug dans le code, ce qui provoque le crash de l'instance de service backend et la rend injoignable. Dans cette situation, la passerelle renvoie un code d'état 503 au client. Pour identifier et corriger le bug, utilisez les journaux.
Erreur : Unexpected token 12606 while expecting start token 200006
Lorsque vous utilisez vllm pour déployer gpt-oss, les appels de service peuvent renvoyer l'erreur suivante :

Solution : Essayez de déployer avec l'accélération SGLang.
Erreur d'appel curl : no URL specified
Vous recevez une erreur no URL specified après avoir envoyé une requête avec la commande suivante :
curl -X http://17****.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/service_name/**path** \
-H "Content-Type: application/json" \
-H "Authorization: **********==" \
-d '{"***":"****"}'
Cause : La commande curl utilise l'indicateur -X mais il manque la méthode, telle que POST.
L'appel renvoie un encodage ASCII
Modifiez votre code comme suit :
from flask import Flask, Response
@app.route('/hello', methods=['POST'])
def get_advice():
result = "result"
return Response(result, mimetype='text/plain', charset='utf-8')
Comment résoudre « [WARN] connection is closed: End of file » ou « Write a Invalid stream: End of file » dans les journaux de service ?
Ce journal d'avertissement indique que le client ou le serveur a fermé la connexion et que le serveur tentait d'écrire une réponse vers cette connexion fermée. Une connexion peut être fermée de deux manières :
Délai d'attente côté serveur : En mode Processeur, le délai d'attente par défaut côté serveur est de 5 secondes. Vous pouvez modifier ce paramètre en utilisant le paramètre
metadata.rpc.keepalivedu service. Lorsque le délai d'attente est atteint, le serveur ferme la connexion et enregistre un code d'état 408 dans sa surveillance.Délai d'attente côté client : Les paramètres de votre code d'appel déterminent le délai d'attente côté client. Si le client ne reçoit pas de réponse HTTP dans le délai configuré, il ferme activement la connexion. Le serveur enregistre alors un code d'état 499 dans sa surveillance.
upstream connect error or disconnect/reset before headers. reset reason: connection termination
Des problèmes tels qu'un délai d'attente de connexion persistant ou des charges d'instance déséquilibrées provoquent généralement cette erreur. Si le temps de traitement côté serveur dépasse le délai d'attente HTTP configuré sur le client, le client abandonne la requête et ferme activement la connexion. Un code d'état 499 apparaît alors dans la surveillance côté serveur. Vous pouvez vérifier les métriques de surveillance pour une confirmation supplémentaire. Pour les tâches d'inférence longues, déployez un service d'inférence asynchrone.
Comment résoudre les échecs de débogage en ligne pour les services déployés avec un processeur Tensorflow/Pytorch ?
Pour des raisons de performance, les processeurs TensorFlow/PyTorch utilisent un format protobuf non texte brut pour le corps de la requête. Le débogage en ligne prend actuellement en charge uniquement l'entrée de texte en texte brut. Par conséquent, vous ne pouvez pas déboguer directement les services déployés avec ces processeurs dans la console. Utilisez les SDK EAS fournis pour appeler le service. Pour plus d'informations sur les SDK dans différents langages, consultez SDK d'appel de service.



