Skip to content

Bottlenecks caused by sequential processing of RPC queries #4896

@jinoosss

Description

@jinoosss

Description

RPC simulate and query requests are processed sequentially, causing severe performance degradation in concurrent request environments.

Problem Situation

1. Sequential RPC Request Processing

  • While the first request is being processed, the remaining 49 requests accumulate in the waiting queue
  • Each request takes an average of 1 second to process, accumulating wait time for subsequent requests
  • The 50th request starts processing after waiting 49+ seconds

2. Timeout Cascade Effect

  • Subsequent requests timeout due to accumulated wait time
  • Requests exceeding the timeout setting (typically 10 seconds) fail
  • 80% failure rate is confirmed to be mostly due to timeouts

3. CPU Resource Exhaustion

  • CPU usage increases as computational load accumulates
  • CPU intensive operations affect other RPC requests (block queries, transaction broadcast, etc.)

Test Steps

Test Environment

Test Contract

  • Package: gno.land/r/.../tnft
  • Functions Tested:
    • BulkMint(cur, to, bulkSize)
    • BulkGenerateTokenURI(bulkSize)

Test Script

cd test-scripts && ./run_batch_query_bulk_generate_image_100.sh
cd test-scripts && ./run_batch_simulate_bulk_mint_100.sh
// Computationally intensive function calls
BulkMint(cur, to, 100)           // Simulate minting 100 NFTs
BulkGenerateTokenURI(100)        // Query to generate 100 TokenURIs

The problem occurs when multiple clients simultaneously call simulate or query on computationally intensive functions as shown above.

Test Results (50 concurrent requests)

Response Summary:
  - Successful Requests (200): 11
  - Failed Requests: 39
  - Total Requests: 50
  - Success Rate: 22.00%

Response Time Statistics:
  - Min Response Time: 1.071566s
  - Max Response Time: 49.636059s
  - Average Response Time: 25.367s

Performance Metrics:
  - Requests per Second: 1.00
  - Total Test Duration: 49.769917000s

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions