Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Threads em excesso no Cloud Pub/Sub

By Joshua FoxJul 5, 20201 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Em geral, threads inativas a mais em Java não são problema. Mas em um ambiente com recursos limitados, e principalmente se o seu software já usa muitas threads, threads extras em excesso podem sobrecarregar o sistema.

O Google Cloud PubSub é um excelente framework de comunicação assíncrona, conhecido por ser leve. Ainda assim, logo no primeiro uso, o cliente Java do Google PubSub cria 60 threads que ficam ativas permanentemente. (Você pode ver todas as threads com Thread.getAllStackTraces().keySet().) Essas threads extras do PubSub são usadas em operações assíncronas durante a publicação de mensagens.

Threads demais

As threads são úteis em um publisher de alto volume; mas, para um publisher de baixo volume, 60 threads é muito mais do que o necessário.

A API para definir o número de threads não faz parte da API oficial do PubSub, é pouco documentada e bem baixo nível. Então, veja como resolver isso.

1. Defina setExecutorThreadCount com um número pequeno, como 4 (ou até 1), conforme abaixo. Isso reduz o número de threads em cerca de 40.

2. Ainda assim, sobram cerca de 20 threads inativas. Você pode reduzi-las conforme documentado pelo ajaaym no GitHub (código abaixo).

Aqui, você cria o Publisher, o GrpcTransportProvider e o ManagedChannelBuilder com um único ExecutorProvider compartilhado de uma só thread, de modo que, no total, apenas uma thread seja adicionada para o Publisher do PubSub.