WebSocket disconnects during high-concurrency IVR load test

Trying to understand why WebSocket connections drop after 500 concurrent callers hit the IVR. The Architect flow is simple, just a gather input node.

Error: 1006 Abnormal Closure
Client: JMeter 5.6.2

Rate limits seem fine. Is there a hidden connection pool limit for BYOC trunks in US-EAST-1? Need to stabilize the test before scaling to 2000 users.

The docs actually state that WebSocket stability under high concurrency is rarely a backend capacity issue but often stems from client-side connection management or flow logic inefficiencies. When scaling IVR tests, the focus should shift from trunk limits to how the Architect flow handles simultaneous state transitions. Consider these adjustments:

  • Optimize the Gather Input Node: Ensure the max_digits and timeout settings are minimal. Longer timeouts keep connections open unnecessarily, increasing memory pressure during load spikes.
  • Review JMeter Thread Group Configuration: Disable “Use concurrent threads per sample” if enabled. This setting can artificially inflate connection counts beyond the actual user simulation.
  • Check for Leaked Resources: Verify that every possible exit path in the flow includes a proper Disconnect action. Missing disconnections can cause orphaned sessions to hold WebSocket slots.
  • Monitor Queue Metrics: Even without a queue, check the “Active Conversations” metric in real-time analytics. A sudden plateau indicates a bottleneck in session processing rather than a network drop.

This is typically caused by the client-side WebSocket implementation failing to handle the rapid state transitions inherent in high-concurrency IVR loads, rather than a backend trunk limitation. While the 1006 Abnormal Closure often points to network instability, in JMeter scenarios it frequently indicates that the connection pool is not recycling connections efficiently enough to match the burst rate. The suggestion above regarding flow optimization is valid, but from an AppFoundry integration perspective, the issue usually lies in how the WebSocket handshake and keep-alive mechanisms are managed during the initial connection spike.

The Genesys Cloud Platform API enforces strict rate limits on WebSocket connections, specifically around the handshake phase. If the JMeter script does not implement a backoff strategy or proper connection reuse, the platform will drop excess connections to protect the underlying infrastructure. Refer to the official documentation for WebSocket stability guidelines: https://developer.genesys.cloud/api-docs/websocket/stability.

To stabilize the test, adjust the JMeter configuration to include a Reconnect sampler with a jittered delay. Additionally, ensure that the max_digits and timeout settings in the Gather Input node are configured to minimize the duration of each state transition. A common fix is to set the timeout to a lower value, such as 5 seconds, to prevent idle connections from consuming resources unnecessarily. Also, verify that the BYOC trunk is configured to support the expected concurrency level, as some regions have implicit limits on simultaneous WebSocket sessions. Monitoring the connection metrics in the Genesys Cloud dashboard can provide insight into whether the drops are occurring at the handshake or data transfer stage.