wu-sheng commented on PR #13703: URL: https://github.com/apache/skywalking/pull/13703#issuecomment-3941260002
## JRE 11 vs JRE 25 Thread Benchmark **Environment**: 2-node OAP cluster, BanyanDB, Istio bookinfo traffic, 10-core Kind node. **Method**: 5 thread dump rounds × 60s apart via `kill -3`, JVM-internal threads excluded. ### JRE 25 (`eclipse-temurin:25-jre`) — ~67-69 OAP threads | Pool | Count | Notes | |------|-------|-------| | BatchQueue (L1+L2+TopN+Remote) | 16 | Unchanged | | armeria-eventloop-epoll | 5 | `max(5, cores/4)` shared | | armeria-boss-http (4 ports) | 4 | | | grpc-default-worker-ELG | 10 | | | grpc-default-executor | 3 | | | ForkJoinPool-1-worker (VT carrier) | 10 | Carries all virtual threads | | ForkJoinPool-1-delayScheduler | 1 | VT scheduled task delays | | VirtualThread-unblocker | 1 | VT scheduler support | | HttpClient-SelectorManager | 2-3 | SharedKubernetesClient | | Schedulers (Alarm, Persistence, etc.) | ~14 | | | **CacheUpdateTimer** | **0** | **→ virtual thread** | | **DataTTLKeeper** | **0** | **→ virtual thread** | | **HealthChecker** | **0** | **→ virtual thread** | | **WatermarkWatcher** | **0** | **→ virtual thread** | | **HierarchyAutoMatching** | **0** | **→ virtual thread** | | **armeria-common-blocking-tasks** | **0** | **→ virtual thread** | ### JRE 11 (`eclipse-temurin:11-jre`) — 66-242 OAP threads | Pool | Count | Notes | |------|-------|-------| | BatchQueue (L1+L2+TopN+Remote) | 16 | Same as JRE 25 | | armeria-eventloop-epoll | 5 | Same shared group | | armeria-boss-http (4 ports) | 4 | | | grpc-default-worker-ELG | 10 | | | grpc-default-executor | 3-4 | | | ForkJoinPool.commonPool-worker | 4-7 | JDK common pool (not VT) | | K8sClient-executor | 1 | Platform fallback for SharedKubernetesClient | | HttpClient-SelectorManager | 2-3 | | | Schedulers (Alarm, Persistence, etc.) | ~14 | | | **CacheUpdateTimer** | **1** | Platform thread | | **DataTTLKeeper** | **1** | Platform thread | | **HealthChecker** | **1** | Platform thread | | **WatermarkWatcher** | **1** | Platform thread | | **HierarchyAutoMatching** | **1** | Platform thread | | **armeria-common-blocking-tasks** | **0-200** | **Cached platform pool, max 200** | ### Key Differences | Aspect | JRE 11 | JRE 25 | |--------|--------|--------| | Scheduler threads (5 pools) | 5 platform threads | 0 (virtual threads) | | Armeria HTTP handler | Up to 200 platform threads | 0 (virtual threads) | | VT carrier (ForkJoinPool) | N/A | ~10 shared carrier threads | | Worst-case total | **242** (one pod) | **69** | | Steady-state total | **~66** (excluding blocking) | **~67-69** | The `armeria-common-blocking-tasks` pool is the biggest difference — on JRE 11 it ballooned to 200 platform threads on one pod under load, while on JRE 25 all HTTP handler work runs on virtual threads sharing ~10 carrier threads. Reports: `benchmarks/reports/istio-cluster_oap-banyandb/thread-analysis/20260222-232130/` (JRE 25), `20260222-233901/` (JRE 11) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
