
Estou perguntando aqui porque não consigo encontrar muita informação sobre isso...
Qual é o principal uso da configuração "Io threads" e "Task max threads" na configuração dos trabalhadores do subsistema IO?
Em todos os lugares que leio, as pessoas dizem que os "threads Io" especificam o número de solicitações simultâneas que o servidor pode manipular e que o "Task max threads" é o número máximo de solicitações simultâneas que o servidor pode manipular.
Então, isso significa que se eu definir os "threads Io" como 50, isso significa que o JBoss pode lidar com 50 solicitações do navegador simultaneamente?
Eu tenho um site onde o requisito é poder atender 1.500 usuários simultâneos em um período de 15 segundos. E cada solicitação não deve demorar mais de 3 segundos para ser concluída. Isso inclui o download de html, js, css e todos os arquivos jpg que o navegador precisa.
Isso significa que preciso definir os "threads Io" para um número maior, como 100, e o "máximo de threads da tarefa" para 150?
Tentei definir "Task max threads" para 150 e até 250, e isso parece deixar meu site lento.
Alguém pode explicar como essas 2 configurações funcionam?
Responder1
Normalmente, você não precisa ter um thread de E/S separado para cada conexão de usuário. Você pode precisar de tantos threads de tarefas quanto de usuários simultâneos a qualquer momento para evitar lentidão. Você pode experimentar os padrões e ver como eles funcionam para seu aplicativo. Veja estes artigos de suporte:
- Ajustando o pool de threads Undertow no JBoss EAP 7
- Diferenças na configuração do trabalhador e do thread de E/S entre EAP 6 e EAP7
- A.29. Atributos do subsistema IO
Observe que o EAP 7.2 possui configuração adicional de threads principais para maior eficiência.
Atualização: Dado que você deseja instruções mais abrangentes, é melhor verificar o completoGuia de ajuste de desempenho do Red Hat Enterprise Application Platform.
Atualização 2: como o EAP 7 está usando o Undertow, para entender o que o IO e o thread de trabalho fazem,documentos sobre ressacadeve dar algumas pistas:
Gerenciamento de threads de IO e Worker
O trabalhador XNIO gerencia os threads de E/S e um pool de threads que pode ser usado para bloquear tarefas. Em geral, os manipuladores sem bloqueio serão executados a partir de um encadeamento de E/S, enquanto tarefas de bloqueio, como invocações de Servlet, serão despachadas para o conjunto de encadeamentos de trabalho.
Responder2
@IWantSimpleLife como @akostadinov se referiu à documentação que descreve o design e como o trabalho de "bloqueio de IO" é separado do trabalho do manipulador. Acho que estou correto ao dizer que, para responder à sua pergunta, os "threads de IO" e "threads máximos de tarefas" não estão diretamente relacionados. Digo isso porque eles se referem a dois grupos de threads separados. O primeiro é "Worker IO threads", que descreve o grupo inicial de manipuladores de "leitura" e "gravação" relacionados a IO que escutam canais e eventos nio. Idealmente, apenas 1 thread no pool de IO e devenuncaexecutar processamento de bloqueio (rede ou arquivo). OoutroO grupo é geralmente chamado de grupo "Worker Task Threads". Que se dedica a executar trabalhos de bloqueio. Um dosconfiguraçõesdeste segundo grupo terá o tamanho "Task max threads".