Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Threads em excesso no Cloud Pub/Sub

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

By Joshua FoxJul 5, 20201 min read
Joshua Fox

About Joshua Fox

Joshua Fox has been a software architect in innovative technology companies for 20 years. Now, he advises tech startups and growth companies on architecture and cost optimization for Google Cloud Platform and Amazon Web Services; also publishing articles, and speaking to cloud engineers.

He has a PhD from Harvard University and a BA in math from Brandeis.

My personal page

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.

PerfectScale™ for Kubernetes

Ready to optimize?

Get your free Kubernetes savings analysis

Your cloud bill shouldn't be a mystery

Optimization, automation, expertise. In one platform.