grpc / grpc/grpc-java

Excess contention in ExecutorService

Ouverte
#2,118 8 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
performance
Langage dominant
Java
Étoiles
12.1k
Forks
4k
Merge moyen
2 j 17 h
PR mergées (30 j)
37

Description

When profiling a client with 200K active RPCs, there is a point of contention on the Executor. Each RPC gets its own SerializingExecutor, which executes work on an underlying executor. Currently, that executor is ThreadPoolExecutor in almost all cases, which itself has a BlockingQueue. That queue is heavily contended showing up at _minutes_ of wasted time:

```
141.17mins 79.41% 79.41% 141.22mins 79.44% java.util.concurrent.LinkedBlockingQueue.offer LinkedBlockingQueue.java
36.51mins 20.54% 99.95% 36.52mins 20.54% java.util.concurrent.LinkedBlockingQueue.take LinkedBlockingQueue.java
```

An idea to fix this is to have some sort of striping executor in order to prevent this contention from happening.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par examiner le chemin de SerializingExecutor et ThreadPoolExecutor décrit dans l’issue, y compris la contention de BlockingQueue montrée par le profil. Le périmètre consiste à définir et à évaluer une approche de striping-executor pour la charge de travail 200K-RPC ; l’issue ne nomme ni fichiers, ni tests, ni critère d’achèvement plus précis.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
backend-api-design, performance
Type d'issue
Refactorisation
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.