Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Demasiados threads en Cloud Pub/Sub

By Joshua FoxJul 5, 20201 min read

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

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.