Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Troppi thread in Cloud Pub/Sub

By Joshua FoxJul 5, 20201 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

In generale, qualche thread inattivo di troppo in Java non è un problema. Ma in un ambiente con risorse limitate, e soprattutto se il software ne utilizza già molti, un eccesso di thread aggiuntivi può sovraccaricare il sistema.

Google Cloud PubSub è un ottimo framework di comunicazione asincrona, noto per la sua leggerezza. Eppure, al primo utilizzo, il client Java di Google PubSub crea 60 thread che restano attivi in modo permanente. (Per visualizzarli tutti basta usare Thread.getAllStackTraces().keySet().) I thread aggiuntivi di PubSub servono per le operazioni asincrone legate alla pubblicazione dei messaggi.

Troppi thread

I thread sono utili per un publisher ad alto volume, ma per uno a basso volume 60 thread sono decisamente troppi.

L'API per impostare il numero di thread non fa parte dell'API ufficiale di PubSub, è poco documentata e piuttosto di basso livello. Ecco quindi come procedere.

1. Imposti setExecutorThreadCount su un valore basso, ad esempio 4 (o anche 1), come mostrato di seguito. In questo modo si riducono i thread di circa 40 unità.

2. Restano comunque una ventina di thread inattivi. Per ridurli, può seguire la procedura documentata da ajaaym su GitHub (codice qui sotto).

In pratica, crei Publisher, GrpcTransportProvider e ManagedChannelBuilder con un unico ExecutorProvider condiviso a singolo thread, così da aggiungere un solo thread complessivo per il Publisher di PubSub.