Very heavy lock contention under load
@brettwooldridge y travaille déjà.
Depuis le 26/9/2025.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 28/100
- Type d'issue
- Bug
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- java
- Domaine
- backend, performance
Piste de recherche
Commencez dans src/com/sun/jna/internal/Cleaner.java, au niveau de Cleaner.register, puis suivez les appelants indiqués dans la stack trace, en particulier la construction de Memory et ByReference. Reproduisez le problème avec un démarrage à froid et environ 1 000 threads sous Linux amd64, puis confirmez que la contention sur le lock est réduite ou éliminée dans des conditions de charge comparables.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
We're experiencing very heavy lock contention with version 5.14. It's in this section of the code https://github.com/java-native-access/jna/blob/5.14.0/src/com/sun/jna/internal/Cleaner.java#L58. In one of the thread dumps we see 647 threads waiting on the lock. We were initially running 5.10, upgrading to 5.14 didn't help.
We've tried with the latest Zulu JDK 22 and JDK 21, same result. Linux amd64. This problem now always triggers in our app immediately after a fresh start, possibly because the JVM is slower. If reduce the amount of threads initially then it doesn't trigger immediately, but it still happens after a while. Sometimes stopping and restarting the threads helps.
The server is not overloaded. We increased the number of cores two-fold and we're still experiencing the problem.
Below is the relevant part of the stacktrace.
Not sure how you can reproduce, in our case we always see this problem from cold start with about 1000 threads.
Any thoughts?
"pool-4-thread-447" #4038 [3373050] prio=5 os_prio=0 cpu=2546.58ms elapsed=612.63s tid=0x00007f5e28011e90 nid=3373050 runnabl
java.lang.Thread.State: RUNNABLE
at com.sun.jna.internal.Cleaner.register(Cleaner.java:58)
- locked <0x00007f6069fdc500> (a com.sun.jna.internal.Cleaner)
at com.sun.jna.Memory.<init>(Memory.java:122)
at com.sun.jna.ptr.ByReference.<init>(ByReference.java:57)
at com.sun.jna.ptr.IntByReference.<init>(IntByReference.java:35)
at com.sun.jna.ptr.IntByReference.<init>(IntByReference.java:31)
at java.lang.invoke.LambdaForm$DMH/0x00007f5fbbf19800.newInvokeSpecial([email protected]/LambdaForm$DMH)
at java.lang.invoke.Invokers$Holder.invokeExact_MT([email protected]/Invokers$Holder)
at jdk.internal.reflect.DirectConstructorHandleAccessor.invokeImpl([email protected]/DirectConstructorHandleAccessor.j
at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance([email protected]/DirectConstructorHandleAccessor.
at java.lang.reflect.Constructor.newInstanceWithCaller([email protected]/Constructor.java:502)
at java.lang.reflect.Constructor.newInstance([email protected]/Constructor.java:486)
at com.sun.jna.Klass.newInstance(Klass.java:48)
at com.sun.jna.NativeMappedConverter.defaultValue(NativeMappedConverter.java:65)
at com.sun.jna.Structure.initializeField(Structure.java:1440)
at com.sun.jna.Structure.initializeFields(Structure.java:1416)
at com.sun.jna.Structure.<init>(Structure.java:218)
at com.sun.jna.Structure.<init>(Structure.java:204)
at com.sun.jna.Structure.<init>(Structure.java:191)
at com.sun.jna.Structure.<init>(Structure.java:183)
- Langage dominant
- Java
- Étoiles
- 8.9k
- Forks
- 1.7k
- Merge moyen
- 1 j 13 h
- PR mergées (30 j)
- 1
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de java-native-access/jna
-
`Native.typeOptions` never releases library interfaces, leaking classloadersPeut-être pris @curforever l’a pris il y a 4 jours. Ouverte
Difficulté 4/5 1-2 jours Accessibilité débutants 48/100
java-native-access/jna#1742 ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 66/100
java-native-access/jna#1738 ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
java-native-access/jna#1736 ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
java-native-access/jna#1717 ·
-
Windows32Exception - The parameter is incorrectPeut-être pris @marktech0813 l’a pris il y a 340 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
java-native-access/jna#1700 · 11 commentaires ·
Toutes les issues de java-native-access/jna
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
apache/rocketmq-dashboard#6896 ·
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
-
Unrecognized database schema version is treated as a pre-2.0 databasePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
OpenIntegrationEngine/engine#496 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
SasanLabs/VulnerableApp#836 ·
Les mainteneurs répondent en général sous 1 jour