Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spring Boot v3.4.0 causes our staging & production environment to hang and time out #43332

Closed
bjornharvold opened this issue Nov 30, 2024 · 24 comments
Labels
status: invalid An issue that we don't feel is valid

Comments

@bjornharvold
Copy link

Our services work on all Spring Boot versions prior to v3.4.0 and have been for years. v3.4.0 works in our dev environment and we are unable to reproduce what is occurring in staging and production.

We have 4 Spring Boot apps running on GCP

  • Spring Authorization server (does not seem to be affected)
  • Spring Boot with webflux doesn't seem to be affected
  • Two Spring Boot Web MVC apps are affected

Here is what happens once the deployment hits staging / production:

  • No errors in the startup log
  • Very quickly, if not immediately, after deployment, requested endpoint starts to hang

GCP metrics (response times goes to 300 seconds and times out after release)
Screenshot 2024-11-30 at 15 15 56

MongoDB console (Activity decreases after release)
screencapture-cloud-mongodb-v2-590aeb37c0c6e35c7ce2d87f-2024-11-30-15_09_07

Cloud Run startup log that shows Spring Boot starting up error free and goes directly to timing out
Screenshot 2024-11-30 at 19 47 40

Maven dependency tree:
dependencies.txt.zip

The next step for us would be to turn on logging to high to see anything interesting shows up. Just spent a Saturday afternoon rolling back from production and trying to figure out where it was coming from. At this moment, I am completely clueless.

Any help would be appreciated.

We deploy Spring Boot with mvn spring-boot:build-image and the plugin config looks like this:

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>process-aot</id>
                        <configuration>
                            <profiles>local,staging,prod</profiles>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <image>
                        <env>
                            <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS>
                            <BPE_APPEND_JAVA_TOOL_OPTIONS>--add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED -Dspring.profiles.active=${environment} -Djava.security.manager=allow</BPE_APPEND_JAVA_TOOL_OPTIONS>
                            <BP_JVM_TYPE>JRE</BP_JVM_TYPE>
                            <BP_JVM_VERSION>${java.version}</BP_JVM_VERSION>
                        </env>
                    </image>
                </configuration>
            </plugin>

Development environment:
Mac OS Sequoia
Atlas CLI
MongoDb 8
Java 23

Providers:
MongoDb Atlas
MongoDb 8
Google Cloud Platform / Cloud run
Java 23

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Nov 30, 2024
@bclozel
Copy link
Member

bclozel commented Nov 30, 2024

I think the critical information here is the state of the JVM threads. This would let us know what's preventing the app from serving requests.

Can you capture this information and let us know?

@bclozel bclozel added the status: waiting-for-feedback We need additional information before we can continue label Nov 30, 2024
@bjornharvold
Copy link
Author

Hi @bclozel,

Thank you for responding as quickly as you did.

I created an endpoint that would return a thread dump like this:

public String getThreadDump() {
        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
        ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(true, true);

        return Arrays.stream(threadInfos)
                .map(ThreadInfo::toString)
                .collect(Collectors.joining("\n"));
    }

Immediately after the application started on CloudRun, I was able to collect the first thread dump here:
thread-dump.txt

I can hit the unauthenticated endpoint "/" an unlimited number of times without any issues.

After I authenticate with Spring Authentication Server 1.4.0 and try to hit a secure endpoint, the server becomes completely unresponsive and I am no longer able to catch a thread dump and Cloud Run times out the connection after 300 seconds.

At this point, the unauthenticated endpoint "/" is no longer responsive regardless if I hit it unauthenticated or authenticated.

Looks like this applies to our other Spring Boot instances as well... the moment I am authenticated with SAS and then try to call any endpoint... 💥☠️ Server hangs.

There is nothing in any of the instance logs, including SAS, that show any errors or any looping or anything out of the ordinary.

Here's a screenshot of what all the instance logs look like after :
Screenshot 2024-12-01 at 12 31 13

I don't see anything out of the ordinary with SAS v1.4.0 release notes in comparison to the SAS version Spring Boot 3.3.6 depends on:
https://github.com/spring-projects/spring-authorization-server/releases/tag/1.4.0

I also don't see anything that should concern us with the latest Spring Data MongoDb release:
https://github.com/spring-projects/spring-data-mongodb/releases/tag/4.4.0

The app that is unresponsive, still logs MongoDb pings as you can see on this screenshot [as if everything is honky dory]:
Screenshot 2024-12-01 at 12 47 40

Let me know how else I can help here. It's not easy capturing a thread dump with Cloud Run when the app is in this, or any, state.

@spring-projects-issues spring-projects-issues added status: feedback-provided Feedback has been provided and removed status: waiting-for-feedback We need additional information before we can continue labels Dec 1, 2024
@bjornharvold
Copy link
Author

Just to follow up on memory. The instance that hangs runs on 2gb of memory w. 1 CPU [and has been doing so for years].

Here's cloud run monitoring screenshot:
screencapture-console-cloud-google-monitoring-dashboards-integration-cloud-run-cloudrun-monitoring-duration-P1D-2024-12-01-12_53_25

@bclozel
Copy link
Member

bclozel commented Dec 1, 2024

It looks like something is blocking threads or some memory leak/infinite recursion.
I’m not a cloud run expert but is there a way to issue a « kill -3 » signal to the container when it’s behaving badly? This should print a thread stack to the console.

The first thread capture doesn’t show anything related to Spring. Maybe you are using Java agents or instrumentation libraries that are not compatible with the latest Spring version?

@bclozel bclozel added status: waiting-for-feedback We need additional information before we can continue and removed status: feedback-provided Feedback has been provided labels Dec 1, 2024
@bjornharvold
Copy link
Author

There is unfortunately no way to do a kill -3 on a Cloud Run instance.

After your last remark I am leaning towards Sentry being the culprit.

spring-io/start.spring.io#1647
getsentry/sentry-java#3941

Will continue my investigation there. Close issue at will.

Cheers Brian 🍻

@spring-projects-issues spring-projects-issues added status: feedback-provided Feedback has been provided and removed status: waiting-for-feedback We need additional information before we can continue labels Dec 1, 2024
@bclozel
Copy link
Member

bclozel commented Dec 2, 2024

I don't think we can track the source of the problem without a snapshot of the java threads when the app is having issues. This could come from any library on your classpath, anny java agent or incompatibility with a remote resource. I haven't seen anything so far pointing to Spring Boot causing issues; we can reopen this issue if we find new information.

I'm not familiar enough with Google Cloud run but not being able to connect to the JVM in any way is quite limiting. Maybe is there a way to configure the instance to open a port and connect a profiler to the running JVM?

Closing this issue for now.

@bclozel bclozel closed this as not planned Won't fix, can't repro, duplicate, stale Dec 2, 2024
@bclozel bclozel added status: invalid An issue that we don't feel is valid and removed status: waiting-for-triage An issue we've not yet triaged status: feedback-provided Feedback has been provided labels Dec 2, 2024
@wilkinsona wilkinsona marked this as a duplicate of #44288 Feb 16, 2025
@wilkinsona
Copy link
Member

wilkinsona commented Feb 16, 2025

@bjornharvold rather than using an endpoint to trigger the thread dump, perhaps you could temporarily add another thread to your app that does it periodically?

@bjornharvold
Copy link
Author

Hi @wilkinsona

That could work. Will give that a go and report back. What would be the best way to handle the dump once done on the Cloud Run instance in your opinion?

@wilkinsona
Copy link
Member

Hopefully it can be output to somewhere from which it can then be copied and pasted for further analysis. If you like some help with that analysis, you could paste it here (if it's not too long) or into a gist or the like. It's very unlikely that it'll contain anything that should be kept confidential, but please do double-check first just in case class or method names reveal more than you'd like.

@bjornharvold
Copy link
Author

Hi @wilkinsona

We added a 10 min thread dump scheduler where we right to the GCP Cloud Log. Here's it what it came back with after the the Spring Boot app became unresponsive.

{
  "insertId": "67baccba00085db3f7b820c3",
  "jsonPayload": {
    "@timestamp": "2025-02-23T07:22:34.541835117Z",
    "service.version": "30.14.4-SNAPSHOT",
    "process.thread.name": "pool-3-thread-1",
    "log.level": "WARN",
    "process.pid": 1,
    "log.logger": "travel.wink.inventory.ThreadDumpScheduler",
    "message": "Thread Dump at: 2025-02-23T07:22:34.539263210Z\n\n\"Reference Handler\" daemon prio=10 Id=9 RUNNABLE\n\tat [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)\n\tat [email protected]/java.lang.ref.Reference.processPendingReferences(Unknown Source)\n\tat [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)\n\n\n\"Finalizer\" daemon prio=8 Id=10 WAITING on java.lang.ref.NativeReferenceQueue$Lock@1bb42068\n\tat [email protected]/java.lang.Object.wait0(Native Method)\n\t-  waiting on java.lang.ref.NativeReferenceQueue$Lock@1bb42068\n\tat [email protected]/java.lang.Object.wait(Unknown Source)\n\tat [email protected]/java.lang.Object.wait(Unknown Source)\n\tat [email protected]/java.lang.ref.NativeReferenceQueue.await(Unknown Source)\n\tat [email protected]/java.lang.ref.ReferenceQueue.remove0(Unknown Source)\n\tat [email protected]/java.lang.ref.NativeReferenceQueue.remove(Unknown Source)\n\tat [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)\n\n\n\"Signal Dispatcher\" daemon prio=9 Id=11 RUNNABLE\n\n\n\"Common-Cleaner\" daemon prio=8 Id=16 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@445257f4\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@445257f4\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)\n\tat [email protected]/java.lang.ref.ReferenceQueue.await(Unknown Source)\n\tat [email protected]/java.lang.ref.ReferenceQueue.remove0(Unknown Source)\n\tat [email protected]/java.lang.ref.ReferenceQueue.remove(Unknown Source)\n\tat [email protected]/jdk.internal.ref.CleanerImpl.run(Unknown Source)\n\tat [email protected]/java.lang.Thread.runWith(Unknown Source)\n\t...\n\n\n\"Notification Thread\" daemon prio=9 Id=17 RUNNABLE\n\n\n\"SentryExecutorServiceThreadFactory-0\" daemon prio=5 Id=23 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4da2209a\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4da2209a\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"BufferPoolPruner-1-thread-1\" daemon prio=5 Id=25 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@61303550\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@61303550\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"cluster-ClusterId{value='67baca5e41e8df745916f9ff', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=27 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5bbdfe7e\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5bbdfe7e\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca5e41e8df745916f9ff', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=28 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@d06ff0a\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@d06ff0a\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca5e41e8df745916f9ff', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=29 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@51fcb8c0\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@51fcb8c0\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"MaintenanceTimer-4-thread-1\" daemon prio=5 Id=30 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@31068d1a\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@31068d1a\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-3-thread-1\" daemon prio=5 Id=31 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@57cdb4a\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@57cdb4a\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-2-thread-1\" daemon prio=5 Id=32 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3f389a40\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3f389a40\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa00', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=34 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@b361fdf\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@b361fdf\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa00', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=35 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@edd2dfe\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@edd2dfe\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa00', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=36 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6d1811e4\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6d1811e4\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"MaintenanceTimer-7-thread-1\" daemon prio=5 Id=37 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16097c9d\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16097c9d\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-6-thread-1\" daemon prio=5 Id=38 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d7a5164\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d7a5164\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-5-thread-1\" daemon prio=5 Id=39 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4aaf2be8\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4aaf2be8\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa01', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=41 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@67159468\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@67159468\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa01', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=42 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3aa5f183\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3aa5f183\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa01', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=43 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@452b66c2\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@452b66c2\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"MaintenanceTimer-9-thread-1\" daemon prio=5 Id=44 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7668e5e4\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7668e5e4\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-10-thread-1\" daemon prio=5 Id=45 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3d958995\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3d958995\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-8-thread-1\" daemon prio=5 Id=46 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@28294e4d\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@28294e4d\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa02', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=48 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@36aa30fc\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@36aa30fc\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa02', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=49 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7dcb408\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7dcb408\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6041e8df745916fa02', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=50 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16944c47\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16944c47\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"MaintenanceTimer-11-thread-1\" daemon prio=5 Id=51 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@742d23fe\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@742d23fe\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-13-thread-1\" daemon prio=5 Id=52 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1367d057\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1367d057\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-12-thread-1\" daemon prio=5 Id=53 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@71f95ac7\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@71f95ac7\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6241e8df745916fa03', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=56 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@55de70ee\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@55de70ee\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6241e8df745916fa03', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=57 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2c49b323\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2c49b323\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"cluster-ClusterId{value='67baca6241e8df745916fa03', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017\" daemon prio=5 Id=58 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3cce789f\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3cce789f\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)\n\tat com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)\n\tat com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)\n\t...\n\n\n\"MaintenanceTimer-14-thread-1\" daemon prio=5 Id=59 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@355c9e8e\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@355c9e8e\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-15-thread-1\" daemon prio=5 Id=60 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1323c1cb\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1323c1cb\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"MaintenanceTimer-16-thread-1\" daemon prio=5 Id=61 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7212b827\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7212b827\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\t...\n\n\n\"pool-3-thread-1\" prio=5 Id=62 RUNNABLE\n\tat [email protected]/sun.management.ThreadImpl.dumpThreads0(Native Method)\n\tat [email protected]/sun.management.ThreadImpl.dumpAllThreads(Unknown Source)\n\tat [email protected]/sun.management.ThreadImpl.dumpAllThreads(Unknown Source)\n\tat travel.wink.inventory.ThreadDumpScheduler.lambda$startThreadDumpScheduler$1(ThreadDumpScheduler.java:34)\n\tat travel.wink.inventory.ThreadDumpScheduler$$Lambda/0x00007f1519976b68.run(Unknown Source)\n\tat [email protected]/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)\n\tat [email protected]/java.util.concurrent.FutureTask.runAndReset(Unknown Source)\n\tat [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)\n\t...\n\n\tNumber of locked synchronizers = 1\n\t- java.util.concurrent.ThreadPoolExecutor$Worker@d4df4ce\n\n\n\"RateLimitExecutorDelayThread\" daemon prio=5 Id=65 WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2fe4edce\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2fe4edce\n\tat [email protected]/java.util.concurrent.locks.LockSupport.park(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)\n\tat [email protected]/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)\n\tat com.google.maps.internal.RateLimitExecutorService.run(RateLimitExecutorService.java:78)\n\t...\n\n\n\"BatchLogRecordProcessor_WorkerThread-1\" daemon prio=5 Id=72 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2786c52b\n\tat [email protected]/jdk.internal.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2786c52b\n\tat [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)\n\tat [email protected]/java.util.concurrent.ArrayBlockingQueue.poll(Unknown Source)\n\tat io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor$Worker.run(BatchLogRecordProcessor.java:246)\n\tat [email protected]/java.lang.Thread.runWith(Unknown Source)\n\tat [email protected]/java.lang.Thread.run(Unknown Source)\n\n\n\"reactor-http-epoll-1\" daemon prio=5 Id=73 RUNNABLE (in native)\n\tat io.netty.channel.epoll.Native.epollWait(Native Method)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:220)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:213)\n\tat io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)\n\tat io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t...\n\n\n\"reactor-http-epoll-2\" daemon prio=5 Id=74 RUNNABLE (in native)\n\tat io.netty.channel.epoll.Native.epollWait(Native Method)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:220)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:213)\n\tat io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)\n\tat io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t...\n\n\n\"reactor-http-epoll-3\" daemon prio=5 Id=75 RUNNABLE (in native)\n\tat io.netty.channel.epoll.Native.epollWait(Native Method)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:220)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:213)\n\tat io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)\n\tat io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t...\n\n\n\"reactor-http-epoll-4\" daemon prio=5 Id=76 RUNNABLE (in native)\n\tat io.netty.channel.epoll.Native.epollWait(Native Method)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:220)\n\tat io.netty.channel.epoll.Native.epollWait(Native.java:213)\n\tat io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)\n\tat io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t...\n\n\n\"XNIO-1 I/O-1\" prio=5 Id=78 RUNNABLE (in native)\n\tat [email protected]/sun.nio.ch.EPoll.wait(Native Method)\n\tat [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)\n\tat [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)\n\t-  locked sun.nio.ch.Util$2@5e93d92c\n\t-  locked sun.nio.ch.EPollSelectorImpl@1ea62587\n\tat [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source)\n\tat org.xnio.nio.WorkerThread.run(WorkerThread.java:544)\n\n\n\"XNIO-1 I/O-2\" prio=5 Id=79 RUNNABLE (in native)\n\tat [email protected]/sun.nio.ch.EPoll.wait(Native Method)\n\tat [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)\n\tat [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)\n\t-  locked sun.nio.ch.Util$2@16243100\n\t-  locked sun.nio.ch.EPollSelectorImpl@71a0172\n\tat [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source)\n\tat org.xnio.nio.WorkerThread.run(WorkerThread.java:563)\n\n\n\"XNIO-1 Accept\" prio=5 Id=80 RUNNABLE (in native)\n\tat [email protected]/sun.nio.ch.EPoll.wait(Native Method)\n\tat [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)\n\tat [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)\n\t-  locked sun.nio.ch.Util$2@4780f204\n\t-  locked sun.nio.ch.EPollSelectorImpl@68256d6e\n\tat [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source)\n\tat org.xnio.nio.WorkerThread.run(WorkerThread.java:544)\n\n\n\"DestroyJavaVM\" prio=5 Id=82 RUNNABLE\n\n\n\"ForkJoinPool-1-worker-1\" daemon prio=5 Id=84 WAITING on java.lang.VirtualThread@5fbefd5b owned by \"undertow-4\" Id=89\n\tat [email protected]/jdk.internal.vm.Continuation.run(Unknown Source)\n\t-  waiting on java.lang.VirtualThread@5fbefd5b\n\tat [email protected]/java.lang.VirtualThread.runContinuation(Unknown Source)\n\tat [email protected]/java.lang.VirtualThread$$Lambda/0x00007f1519e7bf80.run(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)\n\t...\n\n\n\"ForkJoinPool-1-worker-2\" daemon prio=5 Id=86 WAITING on java.lang.VirtualThread@8f8764f owned by \"undertow-5\" Id=90\n\tat [email protected]/jdk.internal.vm.Continuation.run(Unknown Source)\n\t-  waiting on java.lang.VirtualThread@8f8764f\n\tat [email protected]/java.lang.VirtualThread.runContinuation(Unknown Source)\n\tat [email protected]/java.lang.VirtualThread$$Lambda/0x00007f1519e7bf80.run(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)\n\tat [email protected]/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)\n\t...\n\n\n\"MasterPoller\" daemon prio=5 Id=91 RUNNABLE (in native)\n\tat [email protected]/sun.nio.ch.EPoll.wait(Native Method)\n\tat [email protected]/sun.nio.ch.EPollPoller.poll(Unknown Source)\n\tat [email protected]/sun.nio.ch.Poller.pollerLoop(Unknown Source)\n\tat [email protected]/sun.nio.ch.Poller$Pollers$$Lambda/0x00007f1519f63ea0.run(Unknown Source)\n\tat [email protected]/java.lang.Thread.runWith(Unknown Source)\n\tat [email protected]/java.lang.Thread.run(Unknown Source)\n\tat [email protected]/jdk.internal.misc.InnocuousThread.run(Unknown Source)\n\n\n",
    "ecs.version": "8.11"
  },
  "resource": {
    "type": "cloud_run_revision",
    "labels": {
      "service_name": "inventory",
      "location": "us-central1",
      "revision_name": "inventory-01294-zdj",
      "configuration_name": "inventory",
      "project_id": "staging-iko-travel"
    }
  },
  "timestamp": "2025-02-23T07:22:34.548275Z",
  "labels": {
    "instanceId": "00fd7d733704c69872406649fee5b04c2a158aa21d128b56fe1dd07b04122a7714b920b2c3ae8cd4e85dc009925ba8ab5f7579740f22df31cae8a9ccdeb9fc3a776647f88f"
  },
  "logName": "projects/staging-iko-travel/logs/run.googleapis.com%2Fstdout",
  "receiveTimestamp": "2025-02-23T07:22:34.554067263Z",
  "errorGroups": [
    {
      "id": "CM7-zdLUtfTL-wE"
    }
  ]
}

Chat-GPT came back with this response:

Your Spring Boot application appears to be unresponsive due to several potential issues based on the thread dump. Here are the key observations:

Potential Causes of Unresponsiveness

Blocked MongoDB Connection Threads

Multiple threads are stuck in TIMED_WAITING in DefaultServerMonitor.waitForSignalOrTimeout(). This suggests that your application is waiting on MongoDB responses that might not be coming.
This could indicate:
Network issues with MongoDB (iko-staging-shard on [gcp.mongodb.net](http://gcp.mongodb.net/)).
A slow or overloaded MongoDB server.
Connection pooling exhaustion.
Thread Pool Starvation

Many threads are in TIMED_WAITING on ScheduledThreadPoolExecutor$DelayedWorkQueue.take(). This means tasks are waiting for execution but not being picked up.
It suggests:
A potential deadlock in your application logic.
Overloaded thread pools, possibly due to too many blocking calls.
Reactor Netty (Web Server) is Active

reactor-http-epoll-* threads are RUNNABLE, meaning the Netty server is running.
However, if requests are stuck waiting for MongoDB responses, your app may not be able to process new requests effectively.
Rate-Limiting Executor is Waiting

RateLimitExecutorDelayThread is in WAITING, indicating a rate limiter is actively delaying tasks.
If this is used to manage API requests or database access, it might be configured too strictly.
ForkJoinPool Virtual Threads Are Blocked

The ForkJoinPool workers are WAITING on VirtualThread.runContinuation(), meaning some parallel tasks are waiting on locks or external I/O.
This could cause slow processing of concurrent tasks.
Recommended Actions

MongoDB Connection Issues

Check MongoDB availability: ping [iko-staging-shard-00-01.xyhwi.gcp.mongodb.net](http://iko-staging-shard-00-01.xyhwi.gcp.mongodb.net/)
Ensure MongoDB is reachable from your service.
Review connection pool settings: Increase maxPoolSize in MongoDB client settings.
Enable logging for slow queries in MongoDB.
Thread Pool Adjustments

Increase core pool size for ScheduledThreadPoolExecutor.
Reduce blocking operations inside scheduled tasks.
Rate-Limiting Fix

If you're using a rate limiter, check if limits are set too low.
General Debugging

Use JVM profiling tools (jstack, VisualVM, Flight Recorder) to analyze active threads.
Add timeouts on MongoDB queries (find().maxTime(10, TimeUnit.SECONDS)).
Would you like help with specific configuration changes?

@bjornharvold
Copy link
Author

  • Why would Spring Data MongoDb have issues with Spring Boot 3.4.x?
  • I see there is also a TIMED_WAITING on SentryExecutorServiceThreadFactory

Any thoughts on this would be appreciated. Our runs great on 3.3.x. and has been for the entirety of 3.3.x and 3.2.x.

🍻

@wilkinsona
Copy link
Member

Reformatted thread dump:


"Reference Handler" daemon prio=10 Id=9 RUNNABLE
	at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
	at [email protected]/java.lang.ref.Reference.processPendingReferences(Unknown Source)
	at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

"Finalizer" daemon prio=8 Id=10 WAITING on java.lang.ref.NativeReferenceQueue$Lock@1bb42068
	at [email protected]/java.lang.Object.wait0(Native Method)
	-  waiting on java.lang.ref.NativeReferenceQueue$Lock@1bb42068
	at [email protected]/java.lang.Object.wait(Unknown Source)
	at [email protected]/java.lang.Object.wait(Unknown Source)
	at [email protected]/java.lang.ref.NativeReferenceQueue.await(Unknown Source)
	at [email protected]/java.lang.ref.ReferenceQueue.remove0(Unknown Source)
	at [email protected]/java.lang.ref.NativeReferenceQueue.remove(Unknown Source)
	at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Signal Dispatcher" daemon prio=9 Id=11 RUNNABLE

"Common-Cleaner" daemon prio=8 Id=16 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@445257f4
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@445257f4
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
	at [email protected]/java.lang.ref.ReferenceQueue.await(Unknown Source)
	at [email protected]/java.lang.ref.ReferenceQueue.remove0(Unknown Source)
	at [email protected]/java.lang.ref.ReferenceQueue.remove(Unknown Source)
	at [email protected]/jdk.internal.ref.CleanerImpl.run(Unknown Source)
	at [email protected]/java.lang.Thread.runWith(Unknown Source)
	...

"Notification Thread" daemon prio=9 Id=17 RUNNABLE

"SentryExecutorServiceThreadFactory-0" daemon prio=5 Id=23 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4da2209a
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4da2209a
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"BufferPoolPruner-1-thread-1" daemon prio=5 Id=25 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@61303550
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@61303550
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"cluster-ClusterId{value='67baca5e41e8df745916f9ff', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=27 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5bbdfe7e
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5bbdfe7e
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca5e41e8df745916f9ff', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=28 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@d06ff0a
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@d06ff0a
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca5e41e8df745916f9ff', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=29 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@51fcb8c0
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@51fcb8c0
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"MaintenanceTimer-4-thread-1" daemon prio=5 Id=30 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@31068d1a
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@31068d1a
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-3-thread-1" daemon prio=5 Id=31 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@57cdb4a
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@57cdb4a
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-2-thread-1" daemon prio=5 Id=32 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3f389a40
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3f389a40
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa00', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=34 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@b361fdf
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@b361fdf
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa00', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=35 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@edd2dfe
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@edd2dfe
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa00', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=36 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6d1811e4
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6d1811e4
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"MaintenanceTimer-7-thread-1" daemon prio=5 Id=37 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16097c9d
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16097c9d
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-6-thread-1" daemon prio=5 Id=38 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d7a5164
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d7a5164
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-5-thread-1" daemon prio=5 Id=39 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4aaf2be8
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4aaf2be8
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa01', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=41 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@67159468
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@67159468
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa01', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=42 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3aa5f183
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3aa5f183
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa01', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=43 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@452b66c2
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@452b66c2
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...


"MaintenanceTimer-9-thread-1" daemon prio=5 Id=44 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7668e5e4
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7668e5e4
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-10-thread-1" daemon prio=5 Id=45 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3d958995
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3d958995
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-8-thread-1" daemon prio=5 Id=46 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@28294e4d
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@28294e4d
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa02', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=48 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@36aa30fc
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@36aa30fc
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa02', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=49 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7dcb408
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7dcb408
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6041e8df745916fa02', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=50 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16944c47
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16944c47
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"MaintenanceTimer-11-thread-1" daemon prio=5 Id=51 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@742d23fe
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@742d23fe
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-13-thread-1" daemon prio=5 Id=52 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1367d057
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1367d057
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-12-thread-1" daemon prio=5 Id=53 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@71f95ac7
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@71f95ac7
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"cluster-ClusterId{value='67baca6241e8df745916fa03', description='null'}-iko-staging-shard-00-01.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=56 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@55de70ee
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@55de70ee
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6241e8df745916fa03', description='null'}-iko-staging-shard-00-02.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=57 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2c49b323
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2c49b323
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"cluster-ClusterId{value='67baca6241e8df745916fa03', description='null'}-iko-staging-shard-00-00.xyhwi.gcp.mongodb.net:27017" daemon prio=5 Id=58 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3cce789f
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3cce789f
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.lambda$waitForSignalOrTimeout$1(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor$$Lambda/0x00007f1519852998.get(Unknown Source)
	at com.mongodb.internal.Locks.checkedWithLock(Locks.java:62)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForSignalOrTimeout(DefaultServerMonitor.java:345)
	at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitor.waitForNext(DefaultServerMonitor.java:331)
	...

"MaintenanceTimer-14-thread-1" daemon prio=5 Id=59 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@355c9e8e
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@355c9e8e
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-15-thread-1" daemon prio=5 Id=60 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1323c1cb
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1323c1cb
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"MaintenanceTimer-16-thread-1" daemon prio=5 Id=61 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7212b827
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7212b827
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	...

"pool-3-thread-1" prio=5 Id=62 RUNNABLE
	at [email protected]/sun.management.ThreadImpl.dumpThreads0(Native Method)
	at [email protected]/sun.management.ThreadImpl.dumpAllThreads(Unknown Source)
	at [email protected]/sun.management.ThreadImpl.dumpAllThreads(Unknown Source)
	at travel.wink.inventory.ThreadDumpScheduler.lambda$startThreadDumpScheduler$1(ThreadDumpScheduler.java:34)
	at travel.wink.inventory.ThreadDumpScheduler$$Lambda/0x00007f1519976b68.run(Unknown Source)
	at [email protected]/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at [email protected]/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
	at [email protected]/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	...

	Number of locked synchronizers = 1
	- java.util.concurrent.ThreadPoolExecutor$Worker@d4df4ce

"RateLimitExecutorDelayThread" daemon prio=5 Id=65 WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2fe4edce
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2fe4edce
	at [email protected]/java.util.concurrent.locks.LockSupport.park(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
	at [email protected]/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
	at com.google.maps.internal.RateLimitExecutorService.run(RateLimitExecutorService.java:78)
	...

"BatchLogRecordProcessor_WorkerThread-1" daemon prio=5 Id=72 TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2786c52b
	at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
	-  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2786c52b
	at [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
	at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
	at [email protected]/java.util.concurrent.ArrayBlockingQueue.poll(Unknown Source)
	at io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor$Worker.run(BatchLogRecordProcessor.java:246)
	at [email protected]/java.lang.Thread.runWith(Unknown Source)
	at [email protected]/java.lang.Thread.run(Unknown Source)

"reactor-http-epoll-1" daemon prio=5 Id=73 RUNNABLE (in native)
	at io.netty.channel.epoll.Native.epollWait(Native Method)
	at io.netty.channel.epoll.Native.epollWait(Native.java:220)
	at io.netty.channel.epoll.Native.epollWait(Native.java:213)
	at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	...

"reactor-http-epoll-2" daemon prio=5 Id=74 RUNNABLE (in native)
	at io.netty.channel.epoll.Native.epollWait(Native Method)
	at io.netty.channel.epoll.Native.epollWait(Native.java:220)
	at io.netty.channel.epoll.Native.epollWait(Native.java:213)
	at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	...

"reactor-http-epoll-3" daemon prio=5 Id=75 RUNNABLE (in native)
	at io.netty.channel.epoll.Native.epollWait(Native Method)
	at io.netty.channel.epoll.Native.epollWait(Native.java:220)
	at io.netty.channel.epoll.Native.epollWait(Native.java:213)
	at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	...

"reactor-http-epoll-4" daemon prio=5 Id=76 RUNNABLE (in native)
	at io.netty.channel.epoll.Native.epollWait(Native Method)
	at io.netty.channel.epoll.Native.epollWait(Native.java:220)
	at io.netty.channel.epoll.Native.epollWait(Native.java:213)
	at io.netty.channel.epoll.EpollEventLoop.epollWaitNoTimerChange(EpollEventLoop.java:308)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:365)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	...

"XNIO-1 I/O-1" prio=5 Id=78 RUNNABLE (in native)
	at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
	at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)
	at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)
	-  locked sun.nio.ch.Util$2@5e93d92c
	-  locked sun.nio.ch.EPollSelectorImpl@1ea62587
	at [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:544)

"XNIO-1 I/O-2" prio=5 Id=79 RUNNABLE (in native)
	at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
	at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)
	at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)
	-  locked sun.nio.ch.Util$2@16243100
	-  locked sun.nio.ch.EPollSelectorImpl@71a0172
	at [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:563)

"XNIO-1 Accept" prio=5 Id=80 RUNNABLE (in native)
	at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
	at [email protected]/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source)
	at [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)
	-  locked sun.nio.ch.Util$2@4780f204
	-  locked sun.nio.ch.EPollSelectorImpl@68256d6e
	at [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:544)

"DestroyJavaVM" prio=5 Id=82 RUNNABLE

"ForkJoinPool-1-worker-1" daemon prio=5 Id=84 WAITING on java.lang.VirtualThread@5fbefd5b owned by "undertow-4" Id=89
	at [email protected]/jdk.internal.vm.Continuation.run(Unknown Source)
	-  waiting on java.lang.VirtualThread@5fbefd5b
	at [email protected]/java.lang.VirtualThread.runContinuation(Unknown Source)
	at [email protected]/java.lang.VirtualThread$$Lambda/0x00007f1519e7bf80.run(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	...

"ForkJoinPool-1-worker-2" daemon prio=5 Id=86 WAITING on java.lang.VirtualThread@8f8764f owned by "undertow-5" Id=90
	at [email protected]/jdk.internal.vm.Continuation.run(Unknown Source)
	-  waiting on java.lang.VirtualThread@8f8764f
	at [email protected]/java.lang.VirtualThread.runContinuation(Unknown Source)
	at [email protected]/java.lang.VirtualThread$$Lambda/0x00007f1519e7bf80.run(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at [email protected]/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	...

"MasterPoller" daemon prio=5 Id=91 RUNNABLE (in native)
	at [email protected]/sun.nio.ch.EPoll.wait(Native Method)
	at [email protected]/sun.nio.ch.EPollPoller.poll(Unknown Source)
	at [email protected]/sun.nio.ch.Poller.pollerLoop(Unknown Source)
	at [email protected]/sun.nio.ch.Poller$Pollers$$Lambda/0x00007f1519f63ea0.run(Unknown Source)
	at [email protected]/java.lang.Thread.runWith(Unknown Source)
	at [email protected]/java.lang.Thread.run(Unknown Source)
	at [email protected]/jdk.internal.misc.InnocuousThread.run(Unknown Source)

@wilkinsona
Copy link
Member

Spring Boot 3.3.x uses 5.0.x of the MongoDB Java driver and Spring Boot 3.4.x uses 5.2.x. Given that upgrade and the large number of Mongo-related threads in the dump that are waiting for something, it does indeed look like a Mongo-related problem. Neither Spring Boot nor Spring Data MongoDB are involved with Mongo at this low level and, in your position, I'd continue the investigation working on the assumption that it's a Mongo Java Driver problem. It appears they've had a similar problem in the past.

One thing that's not clear from the dump is why the server's become unresponsive. I can't see any web request threads stuck waiting for something. Perhaps there wasn't a stuck request at the time of the dump? Regardless, I think addressing the apparent problem with Mongo should be the next step – it'll either solve the problem or eliminate a possible cause.

@bjornharvold
Copy link
Author

Thank you @wilkinsona 🦸‍♂️

  • To confirm, our server had become unresponsive. It would time out on all our endpoints; even simple /ping ones.
  • The upgrade to 3.4.x works locally and always has.
  • We use MongoDb Atlas CLI to stand up a local MongoDb instance so the differences should be negligible.
  • The 6 MongoDb threads are connections to 6 different MongoDb databases
  • The timeout only occurs on Web MVC and not WebFlux
  • Sometimes we cannot replicate the timeout immediately. We just stood up a new instance in our staging environment with Spring Boot 3.4.3 and what timed out yesterday is now working

We will need to keep on investigating. 😑

@wilkinsona
Copy link
Member

wilkinsona commented Feb 24, 2025

If it's not Mongo that's the problem, then I would turn attention to the web server. Looking at the thread dump, you appear to be using Undertow (the XNIO threads). Have you tried with Tomcat or Jetty? If the problem doesn't occur when using WebFlux (and assuming that you're using the default of Netty there), that may be another pointer towards an Undertow problem.

@bjornharvold
Copy link
Author

This seems to have resolved itself with Spring Boot v3.4.3 🤔.

Nothing in the release notes that really stands out. At least no Undertow upgrade.

Staging has not become unresponsive in the last 24 hours.

We will keep on testing and report back.

@bjornharvold
Copy link
Author

I can confirm that it has not been resolved yet. Just deployed to production w v3.4.3. Spring Authorization Server instance is running fine. Our webflux instance runs fine. Our 2 Spring Web MVC instances that see the most traffic both started to hang out some point after release. One was complaining about OutOfMemory so we upgraded from 2Gb to 8Gb. Instance starts up and becomes unresponsive immediately so not a memory issue. We also replicated locally with the same amount of available server memory to rule that out a few weeks ago.

Where we are at:

  • We have no issues running the Spring Boot apps locally
  • Spring WebFlux is fine
  • It's not a memory issue
  • We cannot collect a valuable thread dump as the server says it hasn't hung => so waiting on something
  • It still fails randomly which indicates that at some point it tries to execute some code that then makes the whole server become unresponsive.

This all equates [approx] to 🫤

@wilkinsona
Copy link
Member

We cannot collect a valuable thread dump as the server says it hasn't hung => so waiting on something

I am intrigued by this. How has the server identified that it hasn't hung and how are you being made aware of that?

@bjornharvold
Copy link
Author

Hi @wilkinsona

The last thread dump we shared was taken after the system had become unresponsive and there is nothing in there that implies it's hung.

Also, the fact that we were able to take a thread dump from a scheduled task (not endpoint) shows that the instance is not completely unresponsive.

That's how we came to this conclusion.

Will now try to use Tomcat as you suggested earlier and report back.

@wilkinsona
Copy link
Member

wilkinsona commented Mar 4, 2025

Thanks, I'm with you now. Given that the server's threads show no signs of being unable to handle an HTTP request, I also wonder if there's anything in front of the server that could be causing the problem. Perhaps it's only present in your staging and production environments which might explain why the dev environment is unaffected. It would hopefully be informative to know exactly where the requests are getting stuck. It doesn't look like it's in the server so, presumably, it's somewhere between the client and the server. Perhaps Google support can offer some guidance on diagnosing such a problem.

@bjornharvold
Copy link
Author

...but why would Spring Boot v3.4.x be responsible for anything Google or Cloudflare does? V3.3.x working like a champ.

@wilkinsona
Copy link
Member

Something may have changed how the connections are managed. For example, perhaps connections are being kept alive now when previously they were not.

@bjornharvold
Copy link
Author

We released a Tomcat version to staging environment. Experiencing the same unresponsiveness.

Spring Web MVC App 1 became unresponsive immediately on start:

Image Image

Spring Web MVC App 2 still running. If we released this to production, it would go unresponsive shortly there after. It seems there is "something" that occurs after startup (either immediately or later) that causes this to happen.

@wilkinsona
Copy link
Member

I think you should engage Google support at this point. The goal being to understand why a server that appears to be ready and able to accept requests is unable to do so. Perhaps they can provide some diagnostics about the network.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: invalid An issue that we don't feel is valid
Projects
None yet
Development

No branches or pull requests

4 participants