Skip to content

Remote Load Test Results: middleware.atraxion.com

Date: 2026-02-16 Server: https://middleware.atraxion.com (production testing server) Tool: k6 v1.5.0 Test data: Real Odoo payloads extracted from legacy DB (20k products, 10k partners, 10k sale orders, 10k stocks)

Summary

The remote server plateaus at ~35-40 req/s regardless of concurrency. This is 10x slower than local (350 req/s), explained by server sizing (CPU, PHP-FPM workers, DB connections) and network latency (~130ms round-trip). The optimal concurrency for this server is 10 VUs -- any higher just adds latency without improving throughput.

Remote Results: Inbound (POST) Endpoints

10 VUs (30s duration)

Endpoint Req/s P95 Latency Success Rate vs Legacy (3/s)
Products 37.76 342ms 100.00% 12.6x
Partners 40.90 312ms 99.59% 13.6x
Sale Orders 42.93 300ms 100.00% 14.3x
Stocks 41.84 314ms 51.74%* 13.9x

25 VUs (15s duration)

Endpoint Req/s P95 Latency Success Rate vs Legacy (3/s)
Products 31.23 968ms 99.79% 10.4x
Partners 33.46 916ms 99.81% 11.2x
Sale Orders 35.69 824ms 100.00% 11.9x
Stocks 32.88 893ms 29.64%* 11.0x

50 VUs (12s duration)

Endpoint Req/s P95 Latency Success Rate vs Legacy (3/s)
Products 31.20 1,747ms 100.00% 10.4x
Partners 33.73 1,678ms 99.77% 11.2x
Sale Orders 34.94 1,556ms 100.00% 11.6x
Stocks 33.19 1,640ms 23.29%* 11.1x

*Stocks failures are caused by a missing php-bcmath extension on the server (500 Internal Server Error: undefined function bccomp), not a performance issue.

1 VU baseline (30s duration)

Endpoint Req/s P95 Latency Success Rate
Products 6.25 172ms 100.00%
Partners 8.00 157ms 100.00%
Sale Orders 7.59 153ms 100.00%
Stocks 8.31 146ms 100.00%

Comparison: Local vs Remote

Products (POST /api/v1/products)

VUs Local req/s Local P95 Remote req/s Remote P95 Throughput ratio
1 39.95 26ms 6.25 172ms 6.4x
10 278.67 65ms 37.76 342ms 7.4x
25 323.50 135ms 31.23 968ms 10.4x
50 350.73 190ms 31.20 1,747ms 11.2x

All endpoints at peak concurrency (50 VUs)

Endpoint Local Best (req/s) Remote 50 VU (req/s) Ratio
Products 350.73 31.20 11.2x
Partners 296.00 33.73 8.8x
Sale Orders 362.00 34.94 10.4x
Stocks 405.00 33.19 12.2x

Scaling behaviour

Local: Throughput scales linearly from 1 to 50 VUs (40 -> 351 req/s for products), indicating the local machine has ample CPU and DB capacity.

Remote: Throughput peaks at 10 VUs (~40 req/s) and then decreases slightly at 25-50 VUs while latency rises sharply. This is classic server saturation -- adding more concurrent connections just increases queueing without improving throughput.

Local scaling:    1 VU ──── 10 VU ──── 25 VU ──── 50 VU
Products:          40 ────── 279 ────── 324 ────── 351  (linear growth)

Remote scaling:   1 VU ──── 10 VU ──── 25 VU ──── 50 VU
Products:          6.3 ───── 37.8 ───── 31.2 ───── 31.2  (plateau at 10 VU)

Latency Analysis

The baseline network round-trip to the server is ~130-150ms (visible in the 1 VU P95 results). This dominates at low concurrency:

VUs Remote P95 Network overhead Server processing
1 172ms ~130ms ~42ms
10 342ms ~130ms ~212ms
25 968ms ~130ms ~838ms (queueing)
50 1,747ms ~130ms ~1,617ms (heavy queueing)

At 25+ VUs, most of the latency is queueing time waiting for a PHP-FPM worker or DB connection.

Rate Limiting

The server has Symfony rate limiters configured at the application level:

Limiter Limit Window
api_inbound 3,000 1 minute
api_write 1,500 1 minute
api_read 3,000 1 minute

The POST endpoints use the api_write limiter (1,500/min = 25 req/s sustained). Since the server's actual capacity is ~35-40 req/s, this provides adequate headroom for burst traffic while preventing sustained overload.

Test durations were kept short (12-15s at higher VUs) to stay within rate limit windows.

Issues Found

1. Missing php-bcmath extension (Critical)

The stocks endpoint returns 500 errors for payloads that trigger bccomp():

Attempted to call undefined function "bccomp" from namespace "App\Service". (500 Internal Server Error)

Impact: ~50-75% of stock update requests fail. Fix: Install php-bcmath on the server (apt install php8.4-bcmath or equivalent).

2. TLS certificate verification

k6 could not verify the server's TLS certificate (x509: OSStatus -26276). Tests required --insecure-skip-tls-verify. This may indicate a self-signed or improperly chained certificate.

Recommendations

  1. Install php-bcmath on the server to fix stock endpoint failures.
  2. Keep Odoo concurrency at 5-10 for this server -- higher concurrency adds latency without improving throughput.
  3. Scale server resources if higher throughput is needed: more PHP-FPM workers, CPU cores, or DB connection pool size.
  4. Fix TLS certificate chain so clients don't need to skip verification.
  5. 128k pricelist scenario at current remote throughput: 128,000 / 35 = ~61 minutes (vs 12 hours legacy = 12x faster). Scaling the server to match local performance would reduce this to ~6 minutes.

Test Environment

  • Client: macOS Darwin 25.2.0 (Apple Silicon)
  • Server: middleware.atraxion.com (nginx reverse proxy + PHP-FPM + MySQL)
  • k6 version: v1.5.0
  • Local tests date: 2026-02-02
  • Remote tests date: 2026-02-16