mirror of
https://github.com/open-metadata/OpenMetadata
synced 2026-05-24 09:39:11 +00:00
PostgreSQL JDBC 42.7.7 uses synchronized blocks around network I/O (sending queries, reading responses). With virtual threads, a thread that blocks inside synchronized gets pinned to its carrier thread — it cannot unmount even when waiting for I/O. With -XX:ActiveProcessorCount=2, there are exactly 2 ForkJoinPool carrier threads. The moment 2 concurrent SQL queries are executing on virtual threads, both carrier threads are pinned. The health probe's virtual thread becomes runnable but can't be scheduled — no carrier thread is free. Probe times out. Repeat indefinitely. Disabling virtual threads switches Jetty back to a 150-thread platform thread pool. Even if 100 threads are blocked waiting for DB connections, 50 remain available for the health probe and other requests. The complete deadlock is impossible with platform threads |
||
|---|---|---|
| .. | ||
| distributed-test | ||
| debug-latency.sh | ||
| openmetadata-server-start.sh | ||
| openmetadata.sh | ||
| thread-monitor.sh | ||