I have a Java application that runs fine locally but when deployed to Cloud Run, gets blocked in call to a ClassLoader.
2022-10-03 16:40:38,694 WARN [vertx-blocked-thread-checker] io.vertx.core.impl.BlockedThreadChecker - Thread Thread[vert.x-worker-thread-0,5,main] has been blocked for 60722 ms, time limit is 60000 ms io.vertx.core.VertxException: Thread blocked at java.base@17.0.4.1/java.util.zip.ZipFile$Source.getEntryPos(ZipFile.java:1640) at java.base@17.0.4.1/java.util.zip.ZipFile.getEntry(ZipFile.java:331) at java.base@17.0.4.1/java.util.jar.JarFile.getEntry(JarFile.java:518) at java.base@17.0.4.1/java.util.jar.JarFile.getJarEntry(JarFile.java:473) at java.base@17.0.4.1/jdk.internal.loader.URLClassPath$JarLoader.getResource(URLClassPath.java:954) at java.base@17.0.4.1/jdk.internal.loader.URLClassPath.getResource(URLClassPath.java:319) at java.base@17.0.4.1/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:757) at java.base@17.0.4.1/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base@17.0.4.1/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base@17.0.4.1/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base@17.0.4.1/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at app//org.hibernate.annotations.common.reflection.java.JavaReflectionManager.<init>(JavaReflectionManager.java:51) at app//org.hibernate.boot.internal.BootstrapContextImpl.generateHcannReflectionManager(BootstrapContextImpl.java:311) at app//org.hibernate.boot.internal.BootstrapContextImpl.<init>(BootstrapContextImpl.java:89) at app//org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:124) at app//org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:158) at app//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:250) at app//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:182) at app//org.hibernate.reactive.provider.impl.ReactiveEntityManagerFactoryBuilder.<init>(ReactiveEntityManagerFactoryBuilder.java:34) at app//org.hibernate.reactive.provider.ReactivePersistenceProvider.getEntityManagerFactoryBuilder(ReactivePersistenceProvider.java:145) at app//org.hibernate.reactive.provider.ReactivePersistenceProvider.getEntityManagerFactoryBuilderOrNull(ReactivePersistenceProvider.java:95) at app//org.hibernate.reactive.provider.ReactivePersistenceProvider.createEntityManagerFactory(ReactivePersistenceProvider.java:47) at app//javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at app//io.vertx.howtos.hr.MainVerticle.lambda$asyncStart$0(MainVerticle.java:48) at app//io.vertx.howtos.hr.MainVerticle$$Lambda$94/0x0000000800d109c0.get(Unknown Source) at app//io.smallrye.mutiny.operators.uni.builders.UniCreateFromDeferredSupplier.subscribe(UniCreateFromDeferredSupplier.java:25) at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) at app//io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:50) at app//io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:90) at app//io.vertx.mutiny.core.Vertx$3.handle(Vertx.java:666) at app//io.vertx.mutiny.core.Vertx$3.handle(Vertx.java:664) at app//io.vertx.core.impl.ContextImpl.lambda$null$0(ContextImpl.java:159) at app//io.vertx.core.impl.ContextImpl$$Lambda$130/0x0000000800d25a40.handle(Unknown Source) at app//io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:100) at app//io.vertx.core.impl.ContextImpl.lambda$executeBlocking$1(ContextImpl.java:157) at app//io.vertx.core.impl.ContextImpl$$Lambda$128/0x0000000800d27378.run(Unknown Source) at app//io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76) at app//io.vertx.core.impl.TaskQueue$$Lambda$89/0x0000000800d0eaa0.run(Unknown Source) at java.base@17.0.4.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base@17.0.4.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at app//io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base@17.0.4.1/java.lang.Thread.run(Thread.java:833) 2022-10-03 16:40:41,693 WARN [vertx-blocked-thread-checker] io.vertx.core.impl.BlockedThreadChecker - Thread Thread[vert.x-worker-thread-0,5,main] has been blocked for 63322 ms, time limit is 60000 ms ^C
I did searching online and typically people debug this kind of thing is to get a thread dump. But how do I get a thread dump for a Cloud Run app? And in general how do I debug this kind of thing?
You can use Cloud Code for VS Code, which lets you easily debug an application deployed to Cloud Run by leveraging skaffold debug. Another option, but I warn you that it is deprecated, is Setting Up Cloud Debugger for Java. Please note that Cloud Debugger will be shutdown May 31, 2023; however, it will be available for at least the period of time defined in the terms of service .