Quando um teste de estresse no Performance Testing Service (PTS) falha ou retorna resultados inesperados, o erro aparece como uma exceção Java na mensagem de erro ou como um código de status HTTP na resposta. As seções a seguir agrupam ambos os tipos por causa raiz, com as respectivas soluções.
Para localizar seu erro, pesquise a mensagem exata ou navegue até a seção do código de status HTTP correspondente.
Erros de conexão
Esses erros indicam que o PTS não consegue estabelecer ou manter uma conexão com o servidor backend. Comece verificando a integridade do servidor e o caminho de rede entre o PTS e o endpoint de destino.
class java.net.ConnectException:null
Causa: A conexão TCP com o servidor de destino falhou ou foi rejeitada.
Solução: Verifique a integridade do servidor backend e confirme se não há gargalos de rede entre o PTS e o alvo.
org.apache.http.ConnectionClosedException:Connection closed
Causa: O servidor encerrou a conexão de forma anormal.
Solução: Analise os logs do servidor backend em busca de erros ou exaustão de recursos que possam causar desconexões abruptas.
org.apache.hc.core5.http.ConnectionClosedException:Connection is closed
Causa: O PTS enviou uma requisição em uma conexão que o servidor já havia fechado.
Solução: Verifique se há gargalos na largura de banda da camada de gateway ou no caminho de rede. Se o servidor estiver atrás de um balanceador de carga, confirme se as configurações de tempo limite de conexão ociosa estão alinhadas entre o PTS e o balanceador.
java.io.IOException:Connection reset by peer
Causa: O servidor backend forçou o reset da conexão.
Solução: Se houver um Server Load Balancer (SLB) no caminho da requisição, verifique a configuração do listener do SLB, especialmente o tempo limite de conexão e as definições de health check.
org.apache.http.ConnectionClosedException:Connection closed unexpectedly
Causa: A conexão foi encerrada antes que o PTS recebesse a resposta. Os gatilhos mais comuns incluem:
O servidor não respondeu dentro do prazo esperado.
A sessão de depuração ou o teste de estresse foi interrompido antes da chegada da resposta.
Solução: Confirme se o servidor consegue processar a requisição dentro do tempo limite configurado. Se você parou o teste intencionalmente, esse erro é esperado e pode ser ignorado.
Erros de tempo limite
Esses erros sinalizam que uma requisição ou conexão excedeu o limite de tempo permitido. As causas raízes frequentes envolvem processamento lento no backend, contenção de recursos ou uma configuração de timeout inadequada para a carga de trabalho.
java.util.concurrent.TimeoutException:null
Causa: A tentativa de conexão TCP atingiu o tempo limite. O PTS não conseguiu alcançar o servidor de destino no tempo alocado.
Solução:
Use o fluxo em cascata de tempo nos detalhes do log de amostragem para verificar se a fase de conexão está demorando mais que o normal. Para mais informações, consulte Analyze stress testing results.
Inspecione a integridade do servidor backend e o caminho de rede para identificar possíveis gargalos.
org.apache.hc.core5.http2.H2StreamResetException:Timeout due to inactivity (5000 MILLISECONDS) * class
Causa: O servidor backend não respondeu dentro do tempo limite padrão de requisição de 5 segundos.
Solução: Aumente o tempo limite da requisição na seção Advanced Settings da página Create Scenario.
java.net.SocketTimeoutException:null
Causa: A requisição expirou enquanto aguardava uma resposta ou durante a leitura de dados (tempo limite de inatividade).
Solução:
Certifique-se de que o servidor está íntegro e capaz de processar requisições no tempo esperado.
Verifique se a API de teste de estresse possui uma configuração de tempo limite adequada.
Investigue o servidor em busca de gargalos de desempenho (CPU, memória, I/O).
Erros de redirecionamento e DNS
java.lang.RuntimeException:java.net.UnknownHostException
Causa: Não foi possível resolver o nome de domínio.
Solução:
Confirme se o nome de domínio está registrado e resolvendo corretamente.
Se o domínio não estiver registrado em um DNS público, vincule-o no PTS antes de executar o teste.
org.apache.http.client.CircularRedirectException
Causa: A requisição entrou em um loop de redirecionamento (por exemplo, A -> B -> C -> A) ou ultrapassou o limite de 10 redirecionamentos.
Solução:
Desative o redirecionamento 302: Na página Scenario Settings, desligue a chave Allow 302 Redirect.
Execute o teste de estresse novamente e inspecione a requisição original para confirmar a cadeia de redirecionamento.
Para visualizar o caminho exato do redirecionamento, abra os detalhes do log de amostragem no relatório de teste de estresse e verifique o fluxo em cascata de tempo. Para mais informações, consulte Analyze stress testing results.
Erros de protocolo HTTP/2
org.apache.hc.core5.http.ProtocolException:Header 'key: value' is illegal for HTTP/2 messages
Causa: O cenário inclui cabeçalhos não permitidos pelo HTTP/2. Os seguintes cabeçalhos são proibidos no HTTP/2: Connection, Keep-Alive, Proxy-Connection, Transfer-Encoding, Host e Upgrade.
Solução: Remova os cabeçalhos não suportados da configuração do cenário e execute o teste novamente.
java.nio.channels.CancelledKeyException:null
Causa: O servidor backend encerrou a conexão sob o protocolo HTTP/2.
Solução: Investigue os logs do servidor backend procurando problemas específicos do HTTP/2, como resets de stream ou frames GOAWAY.
Erros de script JMeter
Estes erros ocorrem quando um script JMeter é incompatível com o JMeter V5.0, versão suportada pelo PTS.
java.lang.RuntimeException: Could not find the TestPlan class!
Causa: O script JMeter foi criado com uma versão incompatível com o JMeter V5.0.
Solução: Abra e salve novamente o script no JMeter V5.0 e, em seguida, envie-o para o PTS outra vez.
java.lang.SecurityException: class "xxx"'s signer information does not match signer information of other classes in the same package
Causa: A dependência do sampler Java (ApacheJMeter_core ou ApacheJMeter_java) no script foi compilada com uma versão do JMeter diferente da V5.0.
Solução: Reempacote o JAR de dependência usando as bibliotecas do JMeter V5.0 e envie o pacote atualizado.
Attempt to resolve method: xxx() on undefined variable or class name:
Causa: O sampler BeanShell referencia uma classe que não foi enviada junto com o script.
Solução: Envie o pacote JAR ausente que contém a classe necessária e execute o teste novamente.
Erros de rede 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: O teste de estresse está configurado para usar uma VPC, mas o nome de domínio na URL do teste resolve para um endereço IP público em vez de um endereço IP interno. Testes de estresse em VPC exigem que o IP de destino esteja dentro de um intervalo CIDR privado (10.0.0.0/8, 172.16.0.0/12 ou 192.168.0.0/16).
Solução: Qualquer uma das abordagens abaixo funciona:
Use um endereço IP interno diretamente na URL do teste.
Faça login no PTS console e vincule o nome de domínio a um endereço IP interno.
Códigos de erro HTTP
403 (Forbidden)
Uma resposta 403 significa que o servidor recebeu a requisição, mas recusou sua autorização. Causas comuns em testes de estresse do PTS:
Rejeição de autenticação pelo backend
Causa: O mecanismo de autenticação do servidor rejeitou a requisição, por exemplo, devido a um token ausente ou inválido.
Solução: Revise as configurações de autenticação do service backend e garanta que a requisição do teste de estresse inclua credenciais válidas.
Falha na validação do User-Agent
Causa: O gateway do servidor valida o cabeçalho User-Agent (UA). O UA padrão enviado pelo PTS contém um caractere especial para que alguns services possam distinguir entre tráfego estatístico e regras de limitação. Alguns gateways rejeitam esse UA não padrão.
Solução:
No PTS console, acesse Performance Test > Scenarios.
Selecione o cenário e clique em Edit na coluna Actions.
Na aba Header Definition da página Scenario Settings, defina um UA de navegador padrão:
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.36Clique em Debug. Na página Request Details, verifique se a requisição foi bem-sucedida. Se funcionar após a alteração do UA, continue o teste de estresse com o cabeçalho modificado.
Bloqueio pelo WAF (raro)
Causa: O Web Application Firewall (WAF) está bloqueando o tráfego do teste de estresse.
Solução: Configure uma regra de lista de permissões no WAF que permita o tráfego do PTS. Para mais detalhes, consulte What do I do if the stress testing traffic cannot access my web application due to security policies?
Domínio sem registro ICP
Causa: O nome de domínio usado para o teste de estresse não possui registro ICP ou resolve para outro domínio que também não possui registro.
Solução: Verifique o corpo da resposta. Se a resposta contiver HTML semelhante ao seguinte, o domínio 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 o registro ICP para o domínio antes de tentar o teste de estresse novamente.
405 (Method Not Allowed)
Uma resposta 405 indica que o servidor não suporta o método HTTP utilizado na requisição. Causas frequentes no PTS:
Redirecionamento 302 altera o método da requisição. Quando uma requisição POST aciona um redirecionamento 302, o cliente HTTP pode convertê-la para GET. Se o endpoint de destino não aceitar GET, um erro 405 será retornado.
O servidor restringe métodos explicitamente. Verifique o cabeçalho de resposta
Allow(por exemplo,Allow=GET) para ver quais métodos o servidor aceita.Encaminhamento via SLB ou servidor web modifica o método. Ao encaminhar a requisição, um balanceador de carga ou proxy reverso pode alterar o método. Valide as regras de encaminhamento.
406 (Not Acceptable)
Uma resposta 406 significa que o servidor não pode gerar uma resposta compatível com o cabeçalho Accept da requisição.
Causa: O valor de Accept na aba Header Definition não corresponde ao tipo de conteúdo que o servidor pode retornar. Isso geralmente acontece quando o Content-Type na aba Body Definition é sincronizado automaticamente com a aba Header Definition, e o valor de Accept entra em conflito com ele.
Solução: Ajuste o cabeçalho Accept para corresponder a um tipo suportado pelo servidor. Teste diferentes valores para determinar quais tipos são aceitos. A tabela abaixo lista formatos comuns de Accept e sua ordem de correspondência.
|
Formato |
Descrição |
|
|
HTML |
|
|
Texto simples |
|
|
XML |
|
|
Imagem GIF |
|
|
Imagem JPEG |
|
|
Imagem PNG |
|
|
XHTML |
|
|
Dados XML |
|
|
Agregação Atom XML |
|
|
Dados JSON |
|
|
|
|
|
Documento Word |
|
|
Fluxo binário (downloads de arquivos) |
|
|
Codificação de formulário padrão (pares chave-valor) |
Prioridade de correspondência: Quando múltiplos tipos de Accept são especificados, o servidor os avalia nesta ordem:
Sem fator de qualidade: Correspondência da esquerda para a direita.
application/xml,text/html,application/jsonresulta emapplication/xml>text/html>application/json.Com fator de qualidade: Valores maiores de
qtêm prioridade.application/xml;q=0.3,application/json;q=0.8,text/html(padrãoq=1.0) resulta emtext/html>application/json>application/xml.Especificidade de curinga: Tipos mais específicos correspondem primeiro.
*/*,text/*,text/htmlresulta emtext/html>text/*>*/*.
503 (Service Unavailable)
Servidor backend sobrecarregado
Causa: O servidor backend está sobrecarregado e recusa novas requisições.
Solução: Examine os logs de erro do servidor backend em busca de exaustão de recursos ou limites de capacidade.
Limitação pelo SLB devido a poucos IPs de source
Causa: Um grande número de erros 503 aparece no log de amostragem do PTS, mas o servidor backend não apresenta erros correspondentes. Esse cenário ocorre tipicamente quando todas as condições abaixo são verdadeiras:
O teste de estresse utiliza uma API HTTP ou HTTPS.
O ponto de entrada é uma instância SLB (voltada para a Internet ou interna).
O service backend não retorna erros 503.
-
O corpo da resposta 503 segue este padrão:
<!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 raiz: O PTS usa conexões longas por padrão. Quando o número de endereços IP de source é pequeno, um único endereço IP pode acionar a limitação de proxy único do SLB, impedindo que o SLB balanceie a carga efetivamente.
Solução:
Ative o recurso de extensão de IP do PTS para aumentar o número de IPs de source. Para mais detalhes, consulte Start a scenario.
Aumente o número máximo de usuários virtuais ou o valor de RPS (requisições por segundo). Para mais detalhes, consulte Configure load models and levels.
-
Mude de conexões longas para curtas. Na página Scenario Settings, adicione o seguinte cabeçalho na aba Header Definition:
Key:ConnectionValue:closeNotaAPIs recém-adicionadas herdam essa configuração por padrão. Ajuste individualmente por API caso seu cenário exija modos de conexão mistos.
504 (BadGateway Timeout)
Causa: O gateway não recebeu uma resposta oportuna do servidor backend.
Solução:
Confirme se o servidor backend está em execução e processando requisições normalmente.
Aumente o período de tempo limite na camada de gateway.
Estenda o tempo limite da requisição na seção Advanced Settings da página Create Scenario para dar mais tempo ao gerador de carga.