Fale sobre a configuração do tamanho do pool de threads de negócios JSF

1. Introdução

O pool de threads de negócios JSF usa a tecnologia de pool de threads do JDK e adota o modo cache por padrão (o número de threads principais é 20, o número máximo de threads é 200). Além disso, o modo de tamanho de thread fixo também é fornecido. Ambos os modos podem definir o tamanho da fila de solicitações.

Este artigo tem como objetivo fornecer resultados de benchmark para "configuração do tamanho do pool de threads de negócios JSF" por meio de testes de carga em um cenário simplificado ("aplicativo de serviço único") e tirar algumas conclusões geralmente aplicáveis.

Os leitores-alvo deste artigo incluem engenheiros de testes de estresse, engenheiros e arquitetos de desenvolvimento, implantação e operação e manutenção que precisam configurar razoavelmente o tamanho do thread JSF. Este artigo não cobre outros itens de configuração do servidor JSF, nem discute a configuração razoável de "aplicativos de serviço compostos". É possível usar as conclusões fornecidas neste artigo como referência para projetar casos de teste de estresse ou métodos básicos para avaliar o tamanho do conjunto de encadeamentos de negócios, para que você possa configurar razoavelmente o tamanho do conjunto de encadeamentos de negócios JSF na prática. Deve-se observar que a configuração razoável do tamanho do conjunto de encadeamentos de negócios JSF deve ser baseada em resultados de testes de carga de alta fidelidade.

"Aplicativo de serviço único" significa que o aplicativo contém apenas uma interface fornecida e apenas um método na interface.

"Aplicativo de serviço composto" refere-se a um aplicativo que contém diversas interfaces fornecidas ou uma interface que contém diversos métodos.

2. Descrição do caso de teste

Este teste de benchmark selecionou o sistema de permissão USF3.0 e o personalizou em um único provedor de serviços. Apenas um método do provedor foi testado, portanto pode ser considerado um "aplicativo de serviço único". No teste, a CPU é usada como recurso principal do teste de benchmark e, levando em consideração o impacto do coletor de lixo JVM, dados de teste simples são usados ​​para garantir a consistência de cada chamada ao serviço e para garantir que o YGC tenha regularidade (ou seja, um valor fixo de chamada causará YGC de 30+ms por vez), sem a influência do FGC.

No design do caso de teste, todos os recursos de serviço dependentes são ilimitados para garantir que a taxa de disponibilidade do serviço atinja 100% durante o processo de teste. Nosso principal indicador de desempenho é o TP99, ou seja, 99% dos tempos de resposta do serviço devem ser inferiores a 10ms.

Para testar o desempenho em diferentes modos de pool de threads, usamos os modos Cache e Fixo do pool de threads JSF e conduzimos vários conjuntos de testes para cada modo para descobrir as condições de carga máxima do sistema.

Aplicação de teste : sistema de permissão USF3.0 (processamento personalizado)

Serviço de teste : com.jd.susf.service.api.SusfPermissionService#findUserInfo, um serviço retornado pela consulta de dados do Redis com base nas informações do usuário.

Configuração de hardware : único 4C 8G

Método de teste : O sistema Forcebot adotou um método de pressão de escada para conduzir testes de carga do sistema no pool de threads de negócios JSF nos modos Cache e Fixo.

Formular requisitos de SLA : TP99 de tempo de resposta de serviço <10ms

Observação: personalizamos o sistema de permissão USF3.0, ajustamos os dados de configuração do provedor de serviços e mantemos apenas com.jd.susf.service.api.SusfPermissionService.

3. Resultados e análises de testes

3.1. Carga do sistema do pool de threads em cache

Figura: Diagrama de carga do sistema do pool de threads padrão JSF (em cache, threads = 200) sob diferentes números de usuários simultâneos (1-200)

Número de usuários simultâneos TP99 Taxa de transferênciaTPS Utilização da CPU (%)
1~23 <8ms crescimento linear crescimento linear
24 8ms 6553 99,62
25 11ms 6607 99,83
26~79 Crescimento rápido Crescimento lento 99+
80 74ms 6928 99,82
81~199 aumentar lentamente diminuir lentamente 99,82
200 99ms 6230 99,94

Resumo: A configuração padrão do conjunto de encadeamentos JSF apresenta grandes riscos. O sistema pode suportar no máximo 24 simultaneidades. Se mais de 24 simultaneidades forem alcançadas, o SLA não poderá ser cumprido.

3.2 Carga do sistema do pool de threads fixo (fila)

Figura: Diagrama de carga do sistema do conjunto de threads fixos JSF (fixo + fila) sob diferentes números de usuários simultâneos (1-50)

Número de threads de negócios JSF O número máximo de usuários simultâneos que podem ser suportados Valor TP (50/90/99/999) Taxa de transferência (TPS) Utilização máxima da CPU (%)
4 11 08/07/10/18 1531 27,67
8 25 8/8/10/18 3113 46,45
16 50 8/8/10/21 6228 87,97
20 23 04/03/10/15 6409 99,92
24 22 04/03/07/15 6178 99,86
25 22 04/03/06/15 6182 98,83

Tabela: Conjunto de threads de negócios fixos JSF (fixo + fila) atende à carga máxima do sistema (número máximo de usuários simultâneos) de TP99<10ms

resumo:

① No modo de thread fixo, há um limite máximo de utilização da CPU.

② O uso de filas pode aumentar efetivamente o suporte do sistema à simultaneidade e também melhorar o rendimento. Porém, como as tarefas estão aguardando na fila, o tempo de resposta do serviço aparecerá “uma maré alta levanta todos os barcos”, e há um certo risco.

3.3 Carga do sistema do pool de threads fixo

Figura: Carregamento do sistema quando o sistema tem o número máximo de usuários simultâneos no modo de pool de threads fixo JSF (fixo)

Número de threads de negócios JSF Número de usuários simultâneos TP99 Taxa de transferência (TPS) Utilização máxima da CPU (%)
4 4 5 1063 20h26
8 8 5 2216 36,62
16 16 6 4262 68,56
20 20 5 5550 86,22
24 24 8 6711 99,62
25 25 16 6644 98,77
26 26 19 6744 99,93

Resumo: Com base no desempenho do pool de threads fixo (fixo), é necessário definir um número razoável de threads para equilibrar a utilização total dos recursos da CPU e atender aos requisitos do SLA. Se o número de threads for muito pequeno, será levará ao desperdício de recursos da CPU e, se o número de threads for muito grande, isso não será possível. Cumpra o SLA

4. Conclusão

Com base nos resultados dos testes e na análise de dados, tiramos as seguintes conclusões:

  • A configuração padrão do pool de threads JSF é arriscada em cenários com alta simultaneidade : poucos servidores onde os serviços JSF estão localizados em ambientes de produção online podem atender ao SLA mesmo com 200 threads. A configuração do pool de threads com no máximo 200 threads coloca o servidor em risco de ficar sobrecarregado em cenários com alta simultaneidade. A configuração adequada dos tamanhos do pool de threads deve vir de testes de carga de alta fidelidade.
  • Um número suficiente de threads pode garantir a utilização de recursos (CPU) : Os serviços de negócios geralmente têm certas operações de IO (rede, disco, etc.) e a espera ocorrerá durante a execução do thread. A utilização da CPU não é alta e a simultaneidade precisa ser Somente aumentando o número de threads e permitindo que mais threads participem da alocação de CPU a utilização da CPU pode ser melhorada. Quanto mais operações de E/S no serviço, maior será o tempo de espera e mais threads simultâneos serão necessários. Para serviços de negócios com operações de E/S, o número de threads para teste de carga pode começar em 2N (N é o número de núcleos de CPU do servidor).
  • Um número excessivo de threads apenas reduzirá o SLA do sistema : quando o número de threads já pode utilizar 100% da CPU, se você aumentar o número de threads, os threads não conseguirão obter alocação de CPU suficiente, então a resposta o tempo do serviço aumentará. Dentro de um determinado intervalo, o TP99 ainda pode atender aos requisitos do SLA e a taxa de transferência do sistema também aumentará ligeiramente. Se você continuar a aumentar o número de threads, o TP99 não será capaz de atender aos requisitos do sistema e a taxa de transferência do sistema começará a diminuir.
  • O número fixo de threads pode proteger a capacidade de carga que o sistema precisa suportar : o número fixo de threads pode garantir que a utilização da CPU do sistema seja limitada a um determinado intervalo de carga, proteger a operação estável do sistema e garantir o tempo de resposta TP99, mas também limita a capacidade de simultaneidade do sistema. Definir corretamente o tamanho da fila pode aumentar a simultaneidade do sistema e não afetará o sistema TP99, mas aumentará o tempo geral de resposta do serviço e causará alterações instáveis, o que é arriscado.
  • Deixe a CPU rodar com 100% de carga alta : Normalmente o compromisso de SLA externo do serviço costuma ser maior que o desempenho real do serviço, isso porque consideramos a instabilidade da infraestrutura e dos serviços dependentes. Portanto, mesmo que a CPU tenha atingido 100%, ainda podemos aumentar o número de threads em uma certa quantidade sem afetar o comprometimento do tempo de resposta externo TP99. Isso pode melhorar a capacidade de simultaneidade do sistema. Embora o sistema possa funcionar sob carga elevada, precisamos realizar mais testes de estabilidade para melhorar a confiabilidade do sistema.

Em resumo, a configuração razoável do tamanho do conjunto de threads precisa ser avaliada e testada com base nos requisitos de negócios e nas condições de recursos do sistema, e um espaço de buffer razoável deve ser reservado para garantir a operação estável do sistema e atender aos SLAs do usuário.

5. Apêndice

Apêndice 1: Descrição dos indicadores estatísticos e terminologia

Número de usuários simultâneos : o número de usuários que iniciam solicitações ao mesmo tempo.

Valor TP (50/90/99/999) : Valor TP do cliente, unidade ms, os dados vêm do Forcebot.

Taxa de transferência TPS : os dados vêm do Forcebot.

Utilização da CPU (%) : os dados vêm do PFinder.

Número de encadeamentos de negócios JSF : O número de encadeamentos no conjunto de encadeamentos de negócios JSF, como: <jsf:server id="jsf" protocol="jsf" threadpool="fixed" threads ="16"  / >

fixo/em cache : tipo de conjunto de encadeamentos do conjunto de encadeamentos de negócios JSF, como: <jsf:server id="jsf" protocol="jsf"  threadpool="fixed"  threads="200"/>

Finalmente: O vídeo tutorial completo de teste de software abaixo foi compilado e carregado. Amigos que precisarem podem obtê-lo sozinhos [garantido 100% gratuito]

Documento de entrevista de teste de software

Devemos estudar para encontrar um emprego bem remunerado. As perguntas da entrevista a seguir são dos materiais de entrevista mais recentes de empresas de Internet de primeira linha, como Alibaba, Tencent, Byte, etc., e alguns chefes da Byte deram respostas confiáveis. Depois de terminar isto set Acredito que todos podem encontrar um emprego satisfatório com base nas informações da entrevista.

Acho que você gosta

Origin blog.csdn.net/wx17343624830/article/details/132830463
Recomendado
Clasificación