[Performance Regression] High CPU usage and TPS drop after upgrading Agent from 2.x to 3.x (Spring Boot 2.6.7 + WebFlux / Reactor Netty)
Summary
After upgrading the Pinpoint Agent from 2.x to 3.x, we observed significantly higher CPU usage and earlier throughput saturation under identical load conditions.
The issue is reproducible in a controlled test environment using Spring Boot 2.6.7 with WebFlux (Reactor Netty).
Screenshot Explanation
The attached screenshot compares CPU usage between Pinpoint 2.x and 3.x agents:
- Green line = Pinpoint 2.x Agent
- Yellow line = Pinpoint 3.x Agent
In the graph:
- The yellow line (3.x) consistently shows higher CPU usage than the green line (2.x).
- CPU saturation (near 100%) occurs earlier with 3.x.
- Under increasing load, 3.x reaches CPU limit faster and remains saturated.
- 2.x maintains lower CPU usage under the same workload.
This behavior directly correlates with TPS degradation observed in load testing.
Environment
Application:
- Spring Boot 2.6.7
- WebFlux (Reactor Netty)
- Redis
- MongoDB
- JWT generation
- Encryption
Pinpoint:
- Agent upgraded from 2.x → 3.x
- Applied using: -javaagent:/etc/pinpoint-agent/pinpoint-bootstrap.jar
JVM:
- Xms2g / Xmx2g
- G1GC
Kubernetes:
- CPU request/limit: 1 core
- Memory: 3Gi
Load Tool:
- nGrinder
- Load pattern: Vuser × (response time + 1 second)
Observed Performance Difference
Under identical workload and resource limits:
GET /health
Pinpoint 3.x:
- CPU: 100%
- Avg response: 835ms
- TPS: 73.9
No agent:
- CPU: 29.7%
- Avg response: 438µs
- TPS: 430
GET /auth/blacklist
Pinpoint 3.x (default):
- CPU ~99.7%
- Avg response: 1.62s
- TPS: 56.3
With sampling disabled:
- Avg response: 191ms
- TPS: 122
With sampling + WebFlux/Reactor plugins disabled:
- Avg response: 43.6ms
- TPS: 139
No agent:
- Avg response: 10.9ms
- TPS: 144
Saturation Behavior
With Pinpoint 3.x:
- CPU reaches ~100% earlier.
- TPS plateaus around ~230.
- Increasing load only increases response time, not throughput.
This saturation occurs earlier than with Pinpoint 2.x.
Observations
- Pinpoint 3.x shows consistently higher CPU usage than 2.x.
- 3.x reaches saturation under lower load conditions.
- Throughput degradation directly correlates with CPU saturation.
- Disabling sampling significantly reduces overhead.
- Disabling WebFlux/Reactor-related plugins further improves performance.
Questions
- Are there known performance differences in 3.x compared to 2.x for WebFlux environments?
- Were there changes in tracing or async instrumentation between 2.x and 3.x?
- What configuration is recommended to minimize overhead in WebFlux-based services?
We can provide:
- Thread dumps (agent on/off)
- async-profiler or JFR results
- Full sanitized pinpoint.config
- nGrinder scenario files
Thank you.
Source: pinpoint-apm/pinpoint