Cuando una prueba de estrés en Performance Testing Service (PTS) falla o devuelve resultados inesperados, el error se manifiesta como una excepción de Java en el mensaje de error o como un código de estado HTTP en la respuesta. A continuación se agrupan ambos tipos según su causa raíz, junto con la solución correspondiente para cada caso.
Para localizar su error, busque el mensaje exacto o desplácese hasta la sección del código de estado HTTP correspondiente.
Errores de conexión
Estos errores indican que PTS no logra establecer o mantener una conexión con el servidor de backend. Comience por comprobar el estado del servidor y la ruta de red entre PTS y el endpoint de destino.
class java.net.ConnectException:null
Causa: La conexión TCP hacia el servidor de destino falló o fue rechazada.
Solución: Compruebe el estado del servidor de backend y verifique que no exista ningún cuello de botella en la red entre PTS y el destino.
org.apache.http.ConnectionClosedException:Connection closed
Causa: El servidor finalizó la conexión de forma anómala.
Solución: Revise los registros del servidor de backend en busca de errores o agotamiento de recursos que puedan provocar desconexiones abruptas.
org.apache.hc.core5.http.ConnectionClosedException:Connection is closed
Causa: PTS envió una solicitud a través de una conexión que el servidor ya había cerrado.
Solución: Compruebe si existe un cuello de botella en el ancho de banda de la capa de gateway o en la ruta de red. Si el servidor está detrás de un load balancer, verifique que la configuración de tiempo de espera de conexiones inactivas coincida entre PTS y el load balancer.
java.io.IOException:Connection reset by peer
Causa: El servidor de backend restableció la conexión de manera forzada.
Solución: Si Server Load Balancer (SLB) forma parte de la ruta de la solicitud, revise la configuración del listener de SLB, en particular los parámetros de tiempo de espera de conexión y de comprobación de estado.
org.apache.http.ConnectionClosedException:Connection closed unexpectedly
Causa: La conexión se cerró antes de que PTS recibiera la respuesta. Entre los detonantes más comunes se encuentran los siguientes:
El servidor no respondió dentro del tiempo esperado.
La sesión de depuración o la prueba de estrés se detuvo antes de que llegara la respuesta.
Solución: Verifique que el servidor pueda procesar la solicitud dentro del tiempo de espera configurado. Si la prueba se detuvo de forma intencional, este error es normal y puede ignorarse.
Errores de tiempo de espera
Estos errores indican que una solicitud o conexión superó el límite de tiempo permitido. Las causas más frecuentes incluyen procesamiento lento en el backend, contención de recursos o un tiempo de espera demasiado corto para la carga de trabajo.
java.util.concurrent.TimeoutException:null
Causa: El intento de conexión TCP agotó el tiempo de espera. PTS no logró comunicarse con el servidor de destino en el tiempo asignado.
Solución:
Utilice el diagrama de cascada de tiempos en los detalles del registro de muestreo para comprobar si la fase de conexión tarda más de lo habitual. Para obtener más información, consulte Analyze stress testing results.
Revise el estado del servidor de backend y la ruta de red para detectar cuellos de botella.
org.apache.hc.core5.http2.H2StreamResetException:Timeout due to inactivity (5000 MILLISECONDS) * class
Causa: El servidor de backend no respondió dentro del tiempo de espera predeterminado de 5 segundos.
Solución: Amplíe el tiempo de espera de la solicitud en la sección Advanced Settings de la página Create Scenario.
java.net.SocketTimeoutException:null
Causa: La solicitud agotó el tiempo de espera mientras esperaba una respuesta o leía datos (tiempo de espera por inactividad).
Solución:
Verifique que el servidor funcione correctamente y pueda procesar solicitudes en el tiempo esperado.
Compruebe que la API de prueba de estrés tenga un tiempo de espera adecuado.
Investigue posibles cuellos de botella de rendimiento en el servidor (CPU, memoria, E/S).
Errores de redireccionamiento y DNS
java.lang.RuntimeException:java.net.UnknownHostException
Causa: No es posible resolver el nombre de dominio.
Solución:
Verifique que el nombre de dominio esté registrado y se resuelva correctamente.
Si el dominio no está registrado en un DNS público, vincúlelo en PTS antes de ejecutar la prueba.
org.apache.http.client.CircularRedirectException
Causa: La solicitud entró en un bucle de redireccionamiento (por ejemplo, A -> B -> C -> A) o superó los 10 redireccionamientos.
Solución:
Deshabilite el redireccionamiento 302: en la página Scenario Settings, desactive el interruptor Allow 302 Redirect.
Vuelva a ejecutar la prueba de estrés e inspeccione la solicitud original para confirmar la cadena de redireccionamiento.
Para ver la ruta exacta del redireccionamiento, abra los detalles del registro de muestreo en el informe de la prueba de estrés y revise el diagrama de cascada de tiempos. Para obtener más información, consulte Analyze stress testing results.
Errores del protocolo HTTP/2
org.apache.hc.core5.http.ProtocolException:Header 'key: value' is illegal for HTTP/2 messages
Causa: El escenario incluye encabezados que HTTP/2 no admite. Los siguientes encabezados están prohibidos en HTTP/2: Connection, Keep-Alive, Proxy-Connection, Transfer-Encoding, Host y Upgrade.
Solución: Elimine los encabezados no admitidos de la configuración del escenario y vuelva a ejecutar la prueba.
java.nio.channels.CancelledKeyException:null
Causa: El servidor de backend finalizó la conexión bajo el protocolo HTTP/2.
Solución: Revise los registros del servidor de backend en busca de problemas específicos de HTTP/2, como restablecimientos de flujo o tramas GOAWAY.
Errores de scripts de JMeter
Estos errores ocurren cuando un script de JMeter no es compatible con JMeter V5.0, la versión que admite PTS.
java.lang.RuntimeException: Could not find the TestPlan class!
Causa: El script de JMeter se creó con una versión que no es compatible con JMeter V5.0.
Solución: Abra y vuelva a guardar el script en JMeter V5.0; después, cárguelo nuevamente en PTS.
java.lang.SecurityException: class "xxx"'s signer information does not match signer information of other classes in the same package
Causa: La dependencia del sampler de Java (ApacheJMeter_core o ApacheJMeter_java) del script se compiló con una versión de JMeter distinta a la V5.0.
Solución: Vuelva a empaquetar el archivo JAR de la dependencia con las bibliotecas de JMeter V5.0 y cargue el paquete actualizado.
Attempt to resolve method: xxx() on undefined variable or class name:
Causa: El sampler de BeanShell hace referencia a una clase que no se cargó junto con el script.
Solución: Cargue el paquete JAR faltante que contiene la clase obligatoria y vuelva a ejecutar la prueba.
Errores de red 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
Causa: La prueba de estrés está configurada para usar una VPC, pero el nombre de dominio de la URL de prueba se resuelve a una dirección IP pública en lugar de una interna. Las pruebas de estrés en VPC requieren que la IP de destino pertenezca a un rango CIDR privado (10.0.0.0/8, 172.16.0.0/12 o 192.168.0.0/16).
Solución: Cualquiera de los siguientes enfoques resuelve el problema:
Use directamente una dirección IP interna en la URL de prueba.
Inicie sesión en la consola de PTS y vincule el nombre de dominio a una dirección IP interna.
Códigos de error HTTP
403 (Forbidden)
Una respuesta 403 significa que el servidor recibió la solicitud, pero se negó a autorizarla. Causas comunes en las pruebas de estrés de PTS:
Rechazo de autenticación en el backend
Causa: El mecanismo de autenticación del servidor rechazó la solicitud, por ejemplo, debido a un token faltante o no válido.
Solución: Revise la configuración de autenticación del servicio de backend y asegúrese de que la solicitud de la prueba de estrés incluya credenciales válidas.
Error de validación de User-Agent
Causa: El gateway del servidor valida el encabezado User-Agent (UA). El UA predeterminado que envía PTS contiene un carácter especial para que algunos servicios distingan el tráfico estadístico de las reglas de limitación. Algunos gateways rechazan este UA no estándar.
Solución:
En la consola de PTS, vaya a Performance Test > Scenarios.
Seleccione el escenario y haga clic en Edit en la columna Actions.
En la pestaña Header Definition de la página Scenario Settings, establezca un UA de navegador estándar:
Key:User-AgentValue:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36Haga clic en Debug. En la página Request Details, compruebe que la solicitud se complete correctamente. Si funciona tras cambiar el UA, continúe la prueba de estrés con el encabezado modificado.
Bloqueo por WAF (poco frecuente)
Causa: Web Application Firewall (WAF) está bloqueando el tráfico de la prueba de estrés.
Solución: Configure una regla de lista blanca en WAF que permita el tráfico de PTS. Para obtener más información, consulte What do I do if the stress testing traffic cannot access my web application due to security policies?
Dominio sin registro ICP
Causa: El nombre de dominio utilizado para la prueba de estrés no cuenta con registro ICP, o bien se resuelve a otro dominio que tampoco lo tiene.
Solución: Revise el cuerpo de la respuesta. Si contiene código HTML similar al siguiente, el dominio carece de registro 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>
Solicite el registro ICP del dominio antes de volver a intentar la prueba de estrés.
405 (Method Not Allowed)
Una respuesta 405 significa que el servidor no admite el método HTTP utilizado en la solicitud. Causas comunes en PTS:
Un redireccionamiento 302 cambia el método de la solicitud. Cuando una solicitud POST desencadena un redireccionamiento 302, el cliente HTTP podría convertirla en una solicitud GET. Si el endpoint de destino no acepta GET, se devuelve un error 405.
El servidor restringe los métodos de forma explícita. Revise el encabezado
Allowde la respuesta (por ejemplo,Allow=GET) para conocer qué métodos acepta el servidor.El reenvío desde SLB o el servidor web modifica el método. Cuando un load balancer o un proxy inverso reenvía la solicitud, el método puede cambiar. Verifique las reglas de reenvío.
406 (Not Acceptable)
Una respuesta 406 significa que el servidor no puede generar una respuesta que coincida con el encabezado Accept de la solicitud.
Causa: El valor de Accept en la pestaña Header Definition no coincide con el tipo de contenido que el servidor puede devolver. Esto suele ocurrir cuando el valor de Content-Type de la pestaña Body Definition se sincroniza automáticamente con la pestaña Header Definition y entra en conflicto con el valor de Accept.
Solución: Ajuste el encabezado Accept para que coincida con un tipo que el servidor admita. Pruebe distintos valores para determinar cuáles acepta el servidor. La siguiente tabla muestra los formatos comunes de Accept y su orden de coincidencia.
|
Formato |
Descripción |
|
|
HTML |
|
|
Texto sin formato |
|
|
XML |
|
|
Imagen GIF |
|
|
Imagen JPEG |
|
|
Imagen PNG |
|
|
XHTML |
|
|
Datos XML |
|
|
Agregación Atom XML |
|
|
Datos JSON |
|
|
|
|
|
Documento de Word |
|
|
Flujo binario (descargas de archivos) |
|
|
Codificación de formulario predeterminada (pares clave-valor) |
Prioridad de coincidencia: Cuando se especifican varios tipos de Accept, el servidor los evalúa en el siguiente orden:
Sin factor de calidad: Se evalúan de izquierda a derecha.
application/xml,text/html,application/jsonse evalúa comoapplication/xml>text/html>application/json.Con factor de calidad: Los valores de
qmás altos tienen prioridad.application/xml;q=0.3,application/json;q=0.8,text/html(con valor predeterminadoq=1.0) se evalúa comotext/html>application/json>application/xml.Especificidad de comodines: Los tipos más específicos coinciden primero.
*/*,text/*,text/htmlse evalúa comotext/html>text/*>*/*.
503 (Service Unavailable)
Sobrecarga del servidor de backend
Causa: El servidor de backend está sobrecargado y rechaza nuevas solicitudes.
Solución: Revise los registros de error del servidor de backend para detectar agotamiento de recursos o límites de capacidad.
Limitación de SLB por cantidad reducida de IP de origen
Causa: Aparecen muchos errores 503 en el registro de muestreo de PTS, pero el servidor de backend no presenta errores equivalentes. Este comportamiento suele presentarse cuando se cumplen todas las condiciones siguientes:
La prueba de estrés utiliza una API HTTP o HTTPS.
El punto de entrada es una instancia de SLB (orientada a Internet o interna).
El servicio de backend no devuelve errores 503.
-
El cuerpo de la respuesta 503 coincide con este patrón:
<!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>
Causa raíz: PTS usa conexiones persistentes de forma predeterminada. Cuando la cantidad de direcciones IP de origen es baja, una sola IP puede activar la limitación de proxy único de SLB, lo que impide distribuir la carga de manera eficaz.
Solución:
Habilite la función de extensión de IP de PTS para aumentar la cantidad de IP de origen. Para obtener más información, consulte Start a scenario.
Incremente el número máximo de usuarios virtuales o el valor de RPS (solicitudes por segundo). Para obtener más información, consulte Configure load models and levels.
-
Cambie de conexiones persistentes a conexiones cortas. En la página Scenario Settings, agregue el siguiente encabezado en la pestaña Header Definition:
Key:ConnectionValue:closeNotaLas API recién agregadas heredan esta configuración de forma predeterminada. Ajústela por API si su escenario requiere modos de conexión mixtos.
504 (BadGateway Timeout)
Causa: El gateway no recibió una respuesta oportuna del servidor de backend.
Solución:
Verifique que el servidor de backend esté en ejecución y procese las solicitudes con normalidad.
Amplíe el tiempo de espera en la capa de gateway.
Amplíe el tiempo de espera de la solicitud en la sección Advanced Settings de la página Create Scenario para otorgar más tiempo al generador de carga.