You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add Process Resources section to Grafana dashboard
Add row with panels for memory usage (RSS/virtual), CPU usage,
file descriptors and threads monitoring.
Also clarify rejection scenario (503) and how to overcome
effective rate degradation in high load testing.
Copy file name to clipboardExpand all lines: README.md
+16Lines changed: 16 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -639,6 +639,22 @@ Also, reports are generated as markdown files under the profile's `reports/` sub
639
639
* Data storage is disabled in the script by default to prevent memory from growing and improve server response times (remember that storage shall be kept when provisions require data persistence).
640
640
* In general, even with high traffic rates, you could get sneaky snapshots just enabling and then quickly disabling data storage, for example using [function helpers](#Helper-functions): `server_data_configuration --keep-all && server_data_configuration --discard-all`
641
641
642
+
#### Handling 503 rejections in client mode
643
+
644
+
When using h2agent as a traffic client against a server under congestion, 503 responses indicate the server cannot sustain the requested rate.
645
+
646
+
**Breaking the chain on rejection** (detecting the problem):
647
+
648
+
***`expectedResponseStatusCode`**: set the expected value (e.g., `201`). If the actual response differs, the chain breaks immediately. Simple and deterministic.
649
+
***`onResponseTransform` with filters**: read `response.statusCode` as source, apply conditional logic via filters. On mismatch, use `onFilterFail` to set an error `outState`, write diagnostic vaults, or trigger alternative flows. More flexible than the binary kill-switch above.
650
+
***Omit `expectedResponseStatusCode`**: the chain continues regardless of status code. Useful when you want to collect all events for post-hoc analysis without interrupting the flow.
651
+
652
+
**Managing load under congestion** (mitigating the problem):
653
+
654
+
***External rate controller**: monitor the `h2agent_traffic_client_observed_responses_received_counter{status_code="503"}` metric and adjust the trigger rate dynamically (e.g., a PID loop that reduces CPS when rejection rate exceeds a threshold, or compensates effective load by increasing rate to offset rejections).
655
+
***Tiered rate ramp**: start at low rate and increase stepwise, measuring sustainable throughput at each plateau. Stop when 503 rate exceeds acceptable threshold -- this measures Engineering Capacity (EC).
656
+
***Long ramp-up**: increase rate gradually over time to let the server warm up and stabilize, reducing transient rejections during rate transitions.
657
+
642
658
643
659
644
660
So you may start the process, again, natively or using docker:
0 commit comments