Very heavy lock contention under load
@brettwooldridge ya está trabajando en esto.
Desde el 26/9/2025.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 28/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- java
- Área
- backend, performance
Línea de trabajo
Empieza en src/com/sun/jna/internal/Cleaner.java, en Cleaner.register, y luego sigue los llamadores que aparecen en el stack trace, especialmente la construcción de Memory y ByReference. Reproduce el problema con un arranque en frío y aproximadamente 1.000 hilos en Linux amd64, y confirma que la contención del lock se reduce o se elimina con una carga comparable.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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)
- Lenguaje dominante
- Java
- Estrellas
- 8.9k
- Forks
- 1.7k
- Merge medio
- 1 d 13 h
- PR fusionados (30 d)
- 1
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de java-native-access/jna
-
Dificultad 4/5 3-5 días Aptitud para principiantes 66/100
java-native-access/jna#1738 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
java-native-access/jna#1736 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
java-native-access/jna#1717 ·
-
Windows32Exception - The parameter is incorrectPosiblemente ocupada @marktech0813 la tomó hace 334 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
java-native-access/jna#1700 · 11 comentarios ·
-
feature request
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
java-native-access/jna#1698 · 1 comentario ·
Todos los issues de java-native-access/jna
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
utopia-rise/godot-jvm#1004 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
spring-projects/spring-grpc#442 ·
-
Expose numberOfPermits in RateLimiterEvent.toString() and the ratelimiterevents actuator DTOPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
resilience4j/resilience4j#2547 ·
Los mantenedores suelen responder en 9 días
-
Clock.MakeDate continues execution and returns a rolled-over instant after dispatching error on invalid datePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
mit-cml/appinventor-sources#4155 ·
Los mantenedores suelen responder en 1 día