Vazão vs latência: como se relacionam sob carga
7 min de leitura
A vazão (throughput) é a quantidade de trabalho que um sistema conclui por unidade de tempo, por exemplo requisições por segundo. A latência é o tempo que uma unidade de trabalho leva, por exemplo 120 milissegundos por requisição. Com pouca carga, uma quase não afeta a outra; quando a carga se aproxima da capacidade do sistema, a vazão para de subir e a latência começa a crescer, e encontrar esse ponto é justamente o objetivo de um teste de carga.
O exemplo abaixo é aritmética, sem nenhum teste por trás. As definições das ferramentas vêm da documentação de cada projeto, conferida em 16 de outubro de 2026.
| Vazão | Latência | Largura de banda | |
|---|---|---|---|
| Pergunta que responde | Quanto é concluído por segundo? | Quanto tempo leva uma unidade? | Quanto o link poderia carregar? |
| Unidade comum | requisições ou transações por segundo | milissegundos | megabits por segundo |
| No k6 | http_reqs (contagem e taxa) | http_req_duration | não é alvo do teste |
| No JMeter | Throughput | Elapsed time (e uma “Latency” à parte) | não é alvo do teste |
Qual é a diferença entre vazão e latência?
A vazão conta o trabalho concluído ao longo do tempo; a latência mede o tempo que uma unidade de trabalho leva. Um sistema pode ter latência baixa e vazão baixa, ou vazão alta e latência alta, então você precisa dos dois números para descrevê-lo.
O glossário do JMeter calcula a vazão como o número de requisições dividido pelo tempo total, do início da primeira amostra ao fim da última, incluindo os intervalos entre amostras, porque ela deve representar a carga sobre o servidor (conferido em 16 de outubro de 2026). Isso faz da vazão uma propriedade da execução inteira, enquanto a latência pertence a cada requisição e é melhor lida como uma distribuição: mediana, p95, p99.
Largura de banda é a mesma coisa que vazão?
Não. A largura de banda é a quantidade máxima de dados que um link de rede poderia carregar; a vazão é o que de fato passa. Em um teste de carga, vazão costuma significar requisições concluídas, e a largura de banda só importa quando cargas grandes de dados enchem o link antes de a aplicação esgotar a capacidade.
A página de comparação da AWS resume a visão de rede: latência é o atraso na comunicação de rede, vazão é o volume médio de dados que realmente passa em um período e largura de banda é o máximo teórico (conferido em 16 de outubro de 2026). Boa parte do que se encontra na internet usa esse sentido de rede. Testes de carga usam as mesmas palavras para requisições em vez de pacotes, e por isso vale dizer qual dos dois um relatório quer dizer.
O que “latência” significa em uma ferramenta de teste de carga?
Depende da ferramenta. No JMeter, Latency é o tempo até a primeira parte da resposta, e o tempo de resposta completo se chama Elapsed time. No k6, http_req_duration cobre envio, espera e recebimento, e o tempo até o primeiro byte é uma métrica separada.
O glossário do JMeter mede o Elapsed time de logo antes de enviar a requisição até logo depois de receber a última resposta, e a Latency até logo depois de receber a primeira. A referência de métricas do k6 define http_req_duration como http_req_sending + http_req_waiting + http_req_receiving, sem a resolução de DNS e o estabelecimento da conexão, e chama http_req_waiting de tempo até o primeiro byte (ambos conferidos em 16 de outubro de 2026). Então a Latency do JMeter equivale ao http_req_waiting do k6, não ao http_req_duration. Compare uma “latência” do JMeter com uma “duration” do k6 e o número do JMeter vai parecer melhor sem ser.
Como a vazão e a latência mudam quando a carga cresce?
No início, mais carga significa mais vazão, e a latência fica mais ou menos estável. Quando o sistema chega à sua capacidade, a vazão para de crescer e cada usuário a mais só acrescenta espera, então a latência sobe junto com a carga.
Um exemplo, só aritmética. Um serviço atende no máximo 200 requisições por segundo e responde em 0,1 segundo quando não está ocupado. Cada usuário virtual envia uma requisição e depois faz uma pausa de 1 segundo. Com um número fixo de usuários, a forma da lei de Little para o modelo fechado liga as grandezas: usuários = requisições por segundo × (latência + tempo de pensamento), como nosso artigo sobre a lei de Little mostra passo a passo.
| Usuários virtuais | Vazão (requisições/s) | Latência (s) |
|---|---|---|
| 50 | 45 | 0,1 |
| 150 | 136 | 0,1 |
| 220 | 200 | 0,1 |
| 300 | 200 | 0,5 |
| 400 | 200 | 1,0 |
| 600 | 200 | 2,0 |
Até 220 usuários, a vazão cresce no mesmo ritmo que eles. Depois ela fica presa em 200, e a latência precisa absorver o resto: 300 usuários precisam de 300 ÷ 200 = 1,5 segundo por volta, o que deixa 0,5 segundo de latência. Sistemas reais costumam se curvar de forma mais gradual, porque filas começam a se formar antes do teto exato. Com um teste de taxa de chegada o cenário é mais duro: se as requisições chegam a mais de 200 por segundo, o acúmulo cresce enquanto durar o excesso, que é a diferença que o artigo sobre o modelo de carga aberto vs fechado explica.
Como encontrar o joelho nos seus próprios resultados?
Aumente a carga em degraus, mantenha cada degrau o bastante para estabilizar e anote a vazão e um percentil de latência de cada um. O joelho é o primeiro degrau em que a vazão para de acompanhar a carga enquanto a latência começa a crescer.
Alguns cuidados deixam essa leitura confiável:
- Mantenha cada degrau por alguns minutos, para medir a vazão em um trecho estável e não em uma rampa.
- Leia um percentil, não só a média; a média pode continuar calma enquanto a pequena porcentagem de requisições mais lentas fica bem mais lenta.
- Confira os erros em cada degrau. Falhas rápidas contam como requisições concluídas com tempos curtos, então um sistema com falhas pode mostrar vazão subindo e latência caindo.
- Observe o gerador de carga. Se a CPU dele estiver saturada, o teto que você encontrou pode ser o dele.
O gráfico de tempo de resposta por usuários virtuais da LoadFocus mostra o tempo de resposta médio e máximo em função dos usuários virtuais ativos, um ponto por nível alcançado, e é ali que o joelho aparece em um teste em degraus.
Dá para aumentar a vazão sem aumentar a latência?
Às vezes. Acrescentar capacidade move o teto, então a latência fica plana por mais tempo. Agrupar trabalho (batching) costuma fazer a troca contrária: aumenta a vazão fazendo cada requisição esperar.
O algoritmo de Nagle do TCP é o exemplo clássico dessa troca. A RFC 896 segura novos segmentos enquanto houver dados enviados na conexão ainda sem confirmação, de modo que a rede carrega menos pacotes e mais cheios, e cada escrita pequena pode esperar (conferido em 16 de outubro de 2026). Agrupar requisições e usar buffers de escrita funciona do mesmo jeito: mais trabalho por segundo, mais tempo por item. Quando mudar algo assim, repita o teste em degraus e compare as duas curvas, não um número só.
Qual das duas entra nos seus critérios de aprovação?
As duas, ligadas. Uma meta de latência diz pouco sem a vazão em que foi medida, e uma meta de vazão diz pouco se a latência dobrou para alcançá-la. Escreva as duas como um par, por exemplo p95 abaixo de 300 milissegundos a 200 requisições por segundo com menos de 1% de erros.
Nosso guia de critérios de aprovação de um teste de carga mostra como escrever e automatizar esse par. Se a sua ferramenta espera as respostas lentas antes de enviar a próxima requisição, os números de latência dela podem subestimar o problema; o artigo sobre coordinated omission explica como isso acontece e como evitar. O verbete do glossário da LoadFocus sobre latência explica de onde vem a latência e por que os percentis importam.
FAQ
Latência baixa significa vazão alta? Não necessariamente. Um sistema pode responder rápido a cada requisição mas atender poucas ao mesmo tempo, ou atender muitas ao mesmo tempo enquanto cada uma espera. Você só sabe as duas coisas depois de medir as duas sob a mesma carga, de preferência em vários níveis de carga.
Qual é a diferença entre latência e tempo de resposta? No uso do dia a dia, costumam significar a mesma coisa. No JMeter, Latency é o tempo até a primeira parte da resposta e Elapsed time é o tempo de resposta completo, então confira qual um relatório mostra antes de comparar ferramentas.
Por que a vazão para de aumentar em um teste de carga? Algo chegou ao limite: CPU, um banco de dados, um pool de conexões, um limite de requisições (rate limit) ou o próprio gerador de carga. A partir daí, os usuários a mais só entram na fila, o que aparece como latência subindo com a vazão estável.
Leituras relacionadas
- Lei de Little em teste de carga: dimensionar e conferir
- Modelo de carga aberto vs fechado: qual usar e quando
- Coordinated omission: o que é e como evitar
- Critérios de aprovação de um teste de carga: como definir
- Latência de cauda: o que é e como medir
- Pontuação Apdex: o que é e como calcular
- Lei de Amdahl: fórmula, exemplos e limites
As afirmações técnicas deste artigo não foram revisadas de forma independente.