Tous les produits
Search
Centre de documentation

Performance Testing:Common errors and solutions

Dernière mise à jour :Sep 06, 2026

Lorsqu'un test de charge dans Performance Testing Service (PTS) échoue ou renvoie des résultats inattendus, l'erreur se présente soit sous la forme d'une exception Java dans le message d'erreur, soit sous la forme d'un code d'état HTTP dans la réponse. Les sections suivantes regroupent ces deux types d'erreurs par cause racine et proposent une solution pour chacune.

Pour identifier votre erreur, recherchez le message d'erreur exact ou faites défiler la page jusqu'à la section correspondant au code d'état HTTP concerné.

Erreurs de connexion

Ces erreurs indiquent que PTS ne parvient pas à établir ou à maintenir une connexion avec le serveur backend. Commencez par vérifier l'état du serveur ainsi que le chemin réseau entre PTS et l'endpoint cible.

class java.net.ConnectException:null

Cause : La connexion TCP vers le serveur cible a échoué ou a été rejetée.

Solution : Vérifiez l'état du serveur backend et assurez-vous qu'aucun goulot d'étranglement réseau n'existe entre PTS et la cible.

org.apache.http.ConnectionClosedException:Connection closed

Cause : Le serveur a interrompu la connexion de manière anormale.

Solution : Examinez les journaux du serveur backend pour détecter d'éventuelles erreurs ou un épuisement des ressources pouvant provoquer des déconnexions brutales.

org.apache.hc.core5.http.ConnectionClosedException:Connection is closed

Cause : PTS a envoyé une requête sur une connexion que le serveur avait déjà fermée.

Solution : Vérifiez si la bande passante de la couche gateway ou le chemin réseau présente un goulot d'étranglement. Si le serveur se trouve derrière un équilibreur de charge, assurez-vous que les paramètres de délai d'inactivité des connexions sont alignés entre PTS et l'équilibreur de charge.

java.io.IOException:Connection reset by peer

Cause : Le serveur backend a réinitialisé la connexion de force.

Solution : Si Server Load Balancer (SLB) figure dans le chemin de la requête, vérifiez la configuration de l'écouteur SLB, en particulier les paramètres de délai de connexion et de contrôle d'intégrité.

org.apache.http.ConnectionClosedException:Connection closed unexpectedly

Cause : La connexion a été interrompue avant que PTS ne reçoive la réponse. Les déclencheurs typiques incluent :

  • Le serveur n'a pas répondu dans le délai prévu.

  • La session de débogage ou le test de charge a été arrêté avant l'arrivée de la réponse.

Solution : Vérifiez que le serveur peut traiter la requête dans le délai configuré. Si le test a été intentionnellement arrêté, cette erreur est attendue et peut être ignorée.

Erreurs de délai d'expiration

Ces erreurs indiquent qu'une requête ou une connexion a dépassé la limite de temps autorisée. Les causes racines courantes incluent un traitement backend lent, une contention des ressources ou un paramètre de délai d'expiration trop court pour la charge de travail.

java.util.concurrent.TimeoutException:null

Cause : La tentative de connexion TCP a expiré. PTS n'a pas pu atteindre le serveur cible dans le temps imparti.

Solution :

  1. Utilisez le diagramme en cascade temporel dans les détails du journal d'échantillonnage pour vérifier si la phase de connexion prend un temps inhabituellement long. Pour plus d'informations, consultez Analyser les résultats des tests de charge.

  2. Vérifiez l'état du serveur backend et le chemin réseau pour détecter d'éventuels goulots d'étranglement.

org.apache.hc.core5.http2.H2StreamResetException:Timeout due to inactivity (5000 MILLISECONDS) * class

Cause : Le serveur backend n'a pas répondu dans le délai d'expiration par défaut de la requête, fixé à 5 secondes.

Solution : Augmentez le délai d'expiration de la requête dans la section Advanced Settings de la page Create Scenario.

java.net.SocketTimeoutException:null

Cause : La requête a expiré lors de l'attente d'une réponse ou pendant la lecture des données (délai d'inactivité).

Solution :

  1. Vérifiez que le serveur est opérationnel et peut traiter les requêtes dans le délai attendu.

  2. Assurez-vous que l'API de test de charge dispose d'un paramètre de délai d'expiration approprié.

  3. Examinez le serveur pour identifier d'éventuels goulots d'étranglement liés aux performances (CPU, mémoire, E/S).

Erreurs de redirection et DNS

java.lang.RuntimeException:java.net.UnknownHostException

Cause : Le nom de domaine ne peut pas être résolu.

Solution :

  1. Vérifiez que le nom de domaine est enregistré et qu'il se résout correctement.

  2. Si le domaine n'est pas enregistré auprès d'un DNS public, associez-le dans PTS avant d'exécuter le test.

org.apache.http.client.CircularRedirectException

Cause : La requête est entrée dans une boucle de redirection (par exemple, A -> B -> C -> A) ou a dépassé 10 redirections.

Solution :

  1. Désactivez la redirection 302 : sur la page Scenario Settings , désactivez l'option Allow 302 Redirect .

  2. Exécutez à nouveau le test de charge et inspectez la requête d'origine pour confirmer la chaîne de redirection.

  3. Pour afficher le chemin de redirection exact, ouvrez les détails du journal d'échantillonnage dans le rapport de test de charge et consultez le diagramme en cascade temporel. Pour plus d'informations, voir Analyser les résultats des tests de charge.

Erreurs de protocole HTTP/2

org.apache.hc.core5.http.ProtocolException:Header 'key: value' is illegal for HTTP/2 messages

Cause : Le scénario inclut des en-têtes non autorisés par HTTP/2. Les en-têtes suivants sont interdits dans HTTP/2 : Connection , Keep-Alive , Proxy-Connection , Transfer-Encoding , Host et Upgrade .

Solution : Supprimez les en-têtes non pris en charge de la configuration du scénario et relancez le test.

java.nio.channels.CancelledKeyException:null

Cause : Le serveur backend a interrompu la connexion selon le protocole HTTP/2.

Solution : Examinez les journaux du serveur backend pour détecter des problèmes spécifiques à HTTP/2, tels que des réinitialisations de flux ou des frames GOAWAY.

Erreurs de script JMeter

Ces erreurs surviennent lorsqu'un script JMeter n'est pas compatible avec la version V5.0 de JMeter, prise en charge par PTS.

java.lang.RuntimeException: Could not find the TestPlan class!

Cause : Le script JMeter a été créé avec une version incompatible avec JMeter V5.0.

Solution : Ouvrez et enregistrez à nouveau le script dans JMeter V5.0, puis téléchargez-le de nouveau sur PTS.

java.lang.SecurityException: class "xxx"'s signer information does not match signer information of other classes in the same package

Cause : La dépendance du sampler Java (ApacheJMeter_core ou ApacheJMeter_java) incluse dans le script a été compilée avec une version de JMeter autre que la V5.0.

Solution : Reconditionnez le fichier JAR de dépendance en utilisant les bibliothèques de JMeter V5.0 et téléchargez le package mis à jour.

Attempt to resolve method: xxx() on undefined variable or class name:

Cause : Le sampler BeanShell fait référence à une classe qui n'a pas été téléchargée avec le script.

Solution : Téléchargez le package JAR manquant contenant la classe requise et relancez le test.

Erreurs réseau VPC

class java.lang.IllegalArgumentException:forbidden uri, uri host must match vpc cidr pattern 10.0.0.0/8, 172.16.0.0/12 or 192.168.0.0/16

Cause : Le test de charge est configuré pour utiliser un VPC, mais le nom de domaine présent dans l'URL du test se résout en une adresse IP publique au lieu d'une adresse IP interne. Les tests de charge via VPC exigent que l'adresse IP cible appartienne à une plage CIDR privée (10.0.0.0/8, 172.16.0.0/12 ou 192.168.0.0/16).

Solution : L'une des approches suivantes permet de résoudre le problème :

  • Utilisez directement une adresse IP interne dans l'URL du test.

  • Connectez-vous à la console PTS et associez le nom de domaine à une adresse IP interne.

Codes d'erreur HTTP

403 (Forbidden)

Une réponse 403 indique que le serveur a reçu la requête, mais a refusé de l'autoriser. Causes fréquentes lors des tests de charge PTS :

Rejet par l'authentification backend

Cause : Le mécanisme d'authentification du serveur a rejeté la requête, par exemple en raison d'un jeton manquant ou invalide.

Solution : Vérifiez les paramètres d'authentification du service backend et assurez-vous que la requête du test de charge inclut des identifiants valides.

Échec de la validation User-Agent

Cause : La passerelle du serveur valide l'en-tête User-Agent (UA). L'UA par défaut envoyé par PTS contient un caractère spécial permettant à certains services de distinguer le trafic statistique des règles de limitation de débit. Certaines passerelles rejettent cet UA non standard.

Solution :

  1. Dans la console PTS, accédez à Performance Test > Scenarios.

  2. Sélectionnez le scénario et cliquez sur Edit dans la colonne Actions.

  3. Dans l'onglet Header Definition de la page Scenario Settings, définissez un UA de navigateur standard : Key : User-Agent Value : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36

  4. Cliquez sur Debug. Sur la page Request Details, vérifiez que la requête aboutit. Si la requête fonctionne après modification de l'UA, poursuivez le test de charge avec l'en-tête modifié.

Blocage par le WAF (rare)

Cause : Le Web Application Firewall (WAF) bloque le trafic du test de charge.

Solution : Configurez une règle de liste d'autorisation WAF autorisant le trafic PTS. Pour plus de détails, consultez la rubrique Que faire si le trafic de test de charge ne peut pas accéder à mon application web en raison des politiques de sécurité ?

Domaine non备案 (ICP filing)

Cause : Le nom de domaine utilisé pour le test de charge n'est pas备案, ou il se résout vers un autre domaine qui n'est pas备案.

Solution : Examinez le corps de la réponse. Si la réponse contient un code HTML similaire à celui ci-dessous, le domaine ne dispose pas d'enregistrement ICP :

<html>
<head>
<meta http-equiv="Content-Type" content="textml;charset=UTF-8" />
   <style>body{background-color:#FFFFFF}</style>
<title>TestPage184</title>
  <script language="javascript" type="text/javascript">
         window.onload = function () {
           document.getElementById("mainFrame").src= "http://****.aliyun.com/alww.html";
            }
</script>
</head>
  <body>
    <iframe style="width:860px; height:500px;position:absolute;margin-left:-430px;margin-top:-250px;top:50%;left:50%;" id="mainFrame" src="" frameborder="0" scrolling="no"></iframe>
    </body>
</html>

Demandez un enregistrement ICP pour le domaine avant de relancer le test de charge.

405 (Method Not Allowed)

Une réponse 405 signifie que le serveur ne prend pas en charge la méthode HTTP utilisée dans la requête. Causes fréquentes dans PTS :

  1. La redirection 302 modifie la méthode de requête. Lorsqu'une requête POST déclenche une redirection 302, le client HTTP peut la convertir en requête GET. Si le point de terminaison cible n'accepte pas les requêtes GET, une erreur 405 est renvoyée.

  2. Le serveur restreint explicitement les méthodes. Consultez l'en-tête de réponse Allow (par exemple, Allow=GET) pour voir quelles méthodes le serveur accepte.

  3. La redirection SLB ou du serveur web modifie la méthode. Lorsqu'un équilibreur de charge ou un proxy inverse transfère la requête, la méthode peut être modifiée. Vérifiez les règles de transfert.

406 (Not Acceptable)

Une réponse 406 indique que le serveur ne peut pas générer de réponse correspondant à l'en-tête Accept de la requête.

Cause : La valeur Accept définie dans l'onglet Header Definition ne correspond pas au type de contenu que le serveur est en mesure de renvoyer. Ce problème survient généralement lorsque le paramètre Content-Type de l'onglet Body Definition est automatiquement synchronisé avec l'onglet Header Definition et entre en conflit avec la valeur Accept.

Solution : Ajustez l'en-tête Accept pour qu'il corresponde à un type pris en charge par le serveur. Testez différentes valeurs afin d'identifier les types acceptés. Le tableau suivant répertorie les formats Accept courants ainsi que leur ordre de correspondance.

Format Description
text/html HTML
text/plain Texte brut
text/xml XML
image/gif Image GIF
image/jpeg Image JPEG
image/png Image PNG
application/xhtml+xml XHTML
application/xml Données XML
application/atom+xml Agrégation Atom XML
application/json Données JSON
application/pdf PDF
application/msword Document Word
application/octet-stream Flux binaire (téléchargements de fichiers)
application/x-www-form-urlencoded Encodage de formulaire par défaut (paires clé-valeur)

Priorité de correspondance : Lorsque plusieurs types Accept sont spécifiés, le serveur les fait correspondre selon l'ordre suivant :

  • Sans facteur de qualité : La correspondance s'effectue de gauche à droite. Par exemple, application/xml, text/html, application/json sera traité comme application/xml > text/html > application/json.

  • Avec facteur de qualité : Les valeurs q les plus élevées sont prioritaires. Par exemple, application/xml;q=0.3, application/json;q=0.8, text/html (valeur par défaut q=1.0) sera traité comme text/html > application/json > application/xml.

  • Spécificité des caractères génériques : Les types les plus spécifiques sont traités en premier. Par exemple, */*, text/*, text/html sera traité comme text/html > text/* > */*.

503 (Service Unavailable)

Backend server overloaded

Cause : Le serveur backend est surchargé et refuse d'accepter de nouvelles requêtes.

Solution : Vérifiez les journaux d'erreurs du serveur backend pour détecter un épuisement des ressources ou une atteinte des limites de capacité.

SLB throttling due to limited source IPs

Cause : De nombreuses erreurs 503 apparaissent dans le journal d'échantillonnage PTS, mais le serveur backend n'affiche aucune erreur correspondante. Ce scénario se produit généralement lorsque toutes les conditions suivantes sont réunies :

  • Le test de charge utilise une API HTTP ou HTTPS.

  • Le point d'entrée est une instance SLB (orientée Internet ou interne).

  • Le service backend ne renvoie pas d'erreurs 503.

  • Le corps de la réponse 503 correspond au modèle suivant :

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <html>
      <head><title>503 Service Temporarily Unavailable</title></head>
      <body bgcolor="white">
      <h1>503 Service Temporarily Unavailable</h1>
      <p>The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.</body>
      </html>

Cause racine : PTS utilise des connexions persistantes par défaut. Lorsque le nombre d'adresses IP source est faible, une seule adresse IP peut déclencher une limitation de débit au niveau du proxy unique SLB, empêchant ce dernier d'équilibrer efficacement la charge.

Solution :

  1. Activez la fonctionnalité d'extension d'adresse IP PTS pour augmenter le nombre d'IP sources. Pour plus d'informations, consultez la rubrique Start a scenario.

  2. Augmentez le nombre maximal d'utilisateurs virtuels ou la valeur RPS (requêtes par seconde). Pour plus d'informations, consultez la rubrique Configure load models and levels.

  3. Passez des connexions persistantes aux connexions non persistantes. Sur la page Scenario Settings, ajoutez l'en-tête suivant dans l'onglet Header Definition : Key : Connection Value : close

    Remarque

    Les nouvelles API héritent de ce paramètre par défaut. Ajustez-le pour chaque API si votre scénario nécessite des modes de connexion mixtes.

504 (BadGateway Timeout)

Cause : La passerelle n'a pas reçu de réponse dans les délais impartis de la part du serveur backend.

Solution :

  1. Vérifiez que le serveur backend est opérationnel et traite les requêtes normalement.

  2. Prolongez la période de délai d'attente au niveau de la passerelle.

  3. Augmentez le délai d'attente de la requête dans la section Advanced Settings de la page de création de scénario afin d'accorder plus de temps au générateur de charge.