Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Demasiados threads en Cloud Pub/Sub

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

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

Por lo general, tener threads inactivos de más en Java no representa un problema. Sin embargo, en entornos con recursos limitados, y sobre todo si tu software ya usa muchos threads, el exceso puede saturar el sistema.

Google Cloud PubSub es un excelente framework de comunicación asíncrona y se destaca por ser liviano. Aun así, en el primer uso, el cliente Java de Google PubSub crea 60 threads que quedan activos de forma permanente. (Puedes ver todos los threads con Thread.getAllStackTraces().keySet().) Esos threads adicionales se usan para las operaciones asíncronas que forman parte de la publicación de mensajes.

Demasiados threads

Estos threads resultan útiles para un publisher de alto volumen, pero para uno de bajo volumen, 60 threads son muchísimos.

La API para definir el número de threads no forma parte de la API oficial de PubSub, está poco documentada y es bastante de bajo nivel. Te mostramos cómo hacerlo.

1. Define setExecutorThreadCount con un número bajo, como 4 (o incluso 1), de la siguiente manera. Así se reducen unos 40 threads.

2. Aun así, quedan cerca de 20 threads inactivos. Puedes reducirlos siguiendo lo que documentó ajaaym en GitHub (código abajo).

La idea es crear tu Publisher, tu GrpcTransportProvider y tu ManagedChannelBuilder con un mismo ExecutorProvider compartido de un solo thread, de modo que al Publisher de PubSub se le sume un único thread en total.

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.