Cloud Intelligence™
Demasiados threads en Cloud Pub/Sub
Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.
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 pagePor 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.