Skip to content

v1.41.0 has deadlock problem #3336

@wwingyou

Description

@wwingyou

I'm using Jdtls in neovim with vscode-java-test and java-debug module. After upgrading from v1.3x.x, starting jdtls has been significantly slower sometimes. The log shows that there're deadlock problem.

This problem don't occurs in relativley small projects. I haven't tried other types of projects, but there's problem with spring boot project.

Here's log and build.gralde file.

Log

!SESSION 2024-11-29 14:06:59.983 -----------------------------------------------
eclipse.buildId=unknown
java.version=17.0.10
java.vendor=Eclipse Adoptium
BootLoader constants: OS=macosx, ARCH=aarch64, WS=cocoa, NL=ko_KR
Command-line arguments:  -data /Users/dogchew/.cache/nvim/jdtls/workspace/tech-blog

This is a continuation of log file /Users/dogchew/.cache/nvim/jdtls/workspace/tech-blog/.metadata/.bak_0.log
Created Time: 2024-11-29 14:10:02.661

!ENTRY org.eclipse.osgi 2 0 2024-11-29 14:10:02.661
!MESSAGE While loading class "org.eclipse.buildship.core.WrapperGradleDistribution", thread "Thread[Worker-4: Initialize Workspace,5,main]" timed out waiting (30034ms) for thread "Thread[Worker-1: Initialize After Load,5,main]" to finish starting bundle "org.eclipse.buildship.core_3.1.10.v20240802-0834-s [200]". To avoid deadlock, thread "Thread[Worker-4: Initialize Workspace,5,main]" is proceeding but "org.eclipse.buildship.core.WrapperGradleDistribution" may not be fully initialized.
!STACK 0
org.osgi.framework.BundleException: Unable to acquire the state change lock for the module: osgi.identity; type="osgi.bundle"; version:Version="3.1.10.v20240802-0834-s"; osgi.identity="org.eclipse.buildship.core"; singleton:="true" [id=200] STARTED [STARTED]
	at org.eclipse.osgi.container.Module.lockStateChange(Module.java:373)
	at org.eclipse.osgi.container.Module.start(Module.java:447)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:528)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:620)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:348)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:414)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:516)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:434)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:174)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3373)
	at java.base/java.lang.Class.getConstructor0(Class.java:3578)
	at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2754)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:233)
	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:987)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:275)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:65)
	at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.importers(ProjectsManager.java:401)
	at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.importProjects(ProjectsManager.java:161)
	at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.initializeProjects(ProjectsManager.java:126)
	at org.eclipse.jdt.ls.core.internal.handlers.InitHandler$1.runInWorkspace(InitHandler.java:277)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.util.concurrent.TimeoutException: Timeout after waiting 30 seconds to acquire the lock.
	at org.eclipse.osgi.container.Module.lockStateChange(Module.java:368)
	... 25 more
Caused by: org.eclipse.osgi.framework.util.ThreadInfoReport: Thread dump

ThreadId: 1 ThreadName: main ThreadState: WAITING
  Blocked On: java.lang.Object@78d94588 LockOwnerId: -1 LockOwnerName: null
  Synchronizers Locked: none
  Monitors Locked: none
  Stack Trace: 
    [email protected]/java.lang.Object.wait(Native Method)
    [email protected]/java.lang.Object.wait(Object.java:338)
    org.eclipse.jdt.ls.core.internal.LanguageServerApplication.start(LanguageServerApplication.java:63)
    org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
    org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
    org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
    org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
    org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
    [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
    app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
    app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
    app//org.eclipse.equinox.launcher.Main.run(Main.java:1481)
    app//org.eclipse.equinox.launcher.Main.main(Main.java:1454)

ThreadId: 2 ThreadName: Reference Handler ThreadState: RUNNABLE
  Blocked On: none
  Synchronizers Locked: none
  Monitors Locked: none
  Stack Trace: 
    [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
    [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
    [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)

...

build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.4'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'kr.tgwing'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
	compileOnly 'org.projectlombok:lombok'

	implementation 'mysql:mysql-connector-java:8.0.33'

	implementation 'org.springframework.boot:spring-boot-starter-validation'
	// Swagger
	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'

	annotationProcessor 'org.projectlombok:lombok'

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.security:spring-security-test'

	// jwt
	implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
	implementation 'io.jsonwebtoken:jjwt-impl:0.11.2'
	implementation 'io.jsonwebtoken:jjwt-jackson:0.11.2'

	// gmail
	implementation 'org.springframework.boot:spring-boot-starter-mail'

	// thymeleaf
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'

	// redis
	implementation 'org.springframework.boot:spring-boot-starter-data-redis'

  // https://mvnrepository.com/artifact/com.h2database/h2
  testImplementation 'com.h2database:h2:2.3.232'
}

tasks.named('test') {
	useJUnitPlatform()
}

// 배포용 태스크
tasks.register('jarPath') {
  println "${project.buildDir}/libs/${project.name}-${version}.jar"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions