Request Tuning
Configure request queue, threading, and concurrent request handling
Overview
The Request Tuning page controls how ColdFusion processes concurrent requests and manages its thread pool. These settings directly impact server capacity, resource utilization, and overall performance under load. Proper configuration based on your hardware, application characteristics, and traffic patterns is essential for optimal server performance.
Concurrent Request Settings
Control how many requests ColdFusion can process simultaneously and how requests are queued.
Maximum Number of Running Requests
Maximum Number of Queued Requests
Request Queue Timeout
Request Queue Timeout Page
/errors/queue-timeout.cfmRequest Throttling Settings
Protect your server from overload by automatically throttling request acceptance during high load.
Throttle Threshold
Throttle Memory
Request-Specific Limits
Set separate concurrent request limits for different types of operations.
Flash Remoting Requests
- Default
- 5
- Recommendation
- 0 (legacy, use REST APIs instead)
Flash Remoting is deprecated and rarely used in modern applications. Set to 0 if not using Flash.
Web Service Requests
- Default
- 10
- Recommendation
- Set based on SOAP usage patterns
SOAP web service calls are often slower than regular requests. Consider REST APIs for better performance.
CFC Function Requests
- Default
- 10
- Recommendation
- 25-100 for heavy API usage
Remote CFC method invocations for AJAX requests and API endpoints. Lower values help prevent API abuse.
Report Requests
- Default
- 5
- Recommendation
- Keep low (3-5), use async generation
CFReport is resource-intensive. Use cfthread or scheduled tasks for large reports during off-peak hours.
Chart Requests
- Default
- 10
- Recommendation
- 5-15 depending on chart complexity
Chart generation uses significant CPU and memory. Consider JavaScript charting libraries (Chart.js, Highcharts).
PDF Requests
- Default
- 10
- Recommendation
- 10-20 for typical usage
PDF operations can be CPU and memory intensive. Use cfthread for large PDF generation to avoid blocking.
Thread Pool Settings
Configure thread pool limits for asynchronous processing with cfthread.
Maximum Number of CFThread Threads
Request Timeout in CFThread
Calculating Optimal Settings
Use these formulas as starting points based on your application characteristics.
CPU-Bound Applications
- Characteristics
- Complex calculations, heavy business logic, minimal database calls
- Formula
- Max Requests = CPU Cores × 2 to 4
- Example
- 8-core server = 16-32 concurrent requests
CPU becomes bottleneck. Too many threads cause context switching and degrade performance.
I/O-Bound Applications
- Characteristics
- Database queries, web service calls, file operations
- Formula
- Max Requests = CPU Cores × 10 to 50
- Example
- 8-core server = 80-400 concurrent requests
Threads spend time waiting for I/O, allowing server to handle more concurrent work efficiently.
Hybrid Applications
- Characteristics
- Most common - mix of CPU and I/O operations
- Starting Point
- Max Requests = CPU Cores × 5 to 10
- Example
- 8-core server = 40-80 concurrent requests
Adjust based on load testing and monitoring. This is the most common application profile.
Memory Constraints
- Formula
- Max = (Heap - Overhead) / Avg Request Memory
- Example
- 4 GB heap, 500 MB overhead, 5 MB/request = 700 theoretical max
- Reality
- Set 20-40% of theoretical max for stability
Always leave headroom for GC and memory spikes. Monitor heap usage under peak load.
Best Practices
Production Environment
- Start with conservative limits based on CPU cores
- Perform load testing to determine optimal concurrent request limit
- Enable request throttling to protect against overload
- Set request queue timeout lower than request timeout
- Monitor queue depth, request wait times, and rejection rates
- Keep Flash Remoting and Report limits low (or disabled if unused)
- Allocate sufficient memory per thread (monitor heap usage)
- Create custom timeout pages for better user experience
Development Environment
- Higher request limits for testing concurrent scenarios
- Longer timeouts to accommodate debugging
- Match production settings when performing load testing
- Test timeout and rejection behavior before production deployment
Security Considerations
- Lower concurrent limits help prevent resource exhaustion attacks
- Set conservative CFC function limits to prevent API abuse
- Monitor for unusual request patterns indicating attacks
- Enable request throttling to mitigate denial-of-service attempts
- Log rejected requests for security analysis
Performance Tuning
- Use load testing tools (JMeter, LoadRunner) to determine optimal settings
- Monitor CPU utilization - should be 70-80% under peak load
- Track request queue depth - should rarely exceed 10-20
- Measure response times at various concurrent request levels
- Identify optimal point before performance degrades
- Leave 20-30% headroom for traffic spikes
- Retest after application changes or infrastructure upgrades
Common Issues and Solutions
Request Rejected Errors
- Cause: Concurrent requests exceed running + queued limits
- Short-term: Increase concurrent request limit or queue size
- Long-term: Optimize slow requests, add more servers, implement caching
- Analysis: Identify slow requests causing queue backup
High CPU with Low Throughput
- Cause: Too many concurrent requests causing context switching
- Solution: Reduce maximum concurrent requests
- Target: CPU should be 70-80% under peak load for optimal performance
Request Queue Timeouts
- Cause: Request processing too slow or concurrent limit too low
- Solution: Optimize slow requests or increase concurrent limit
- Analysis: Use FusionReactor or CF Server Monitor to identify bottlenecks
Memory Exhaustion
- Cause: Too many concurrent requests for available heap
- Solution: Reduce concurrent limits or increase heap size
- Formula: Ensure (Max Requests × Avg Request Memory) less than 60% of heap
Slow Response Times Under Load
- Cause: Request queue building up, insufficient capacity
- Solution: Optimize application code, increase concurrent limits, add servers
- Monitoring: Track response time percentiles (p50, p95, p99)
Load Testing Strategy
Testing Methodology
- Baseline Test: Measure performance with conservative settings
- Incremental Increase: Gradually increase concurrent requests
- Monitor Metrics: Track CPU, memory, response times, queue depth
- Identify Peak: Find optimal concurrent requests before degradation
- Add Buffer: Set production limit 20-30% below peak
- Validate: Confirm stability over extended duration
Key Metrics to Monitor
- Response Time: p50, p95, p99 percentiles
- Throughput: Requests per second
- CPU Utilization: Target 70-80% under load
- Memory Usage: Heap utilization and GC frequency
- Queue Depth: Average and peak queue size
- Rejection Rate: Percentage of rejected requests
- Error Rate: Timeouts and application errors
Load Testing Tools
- Apache JMeter: Free, powerful, widely used
- LoadRunner: Enterprise solution with advanced features
- Gatling: Code-based load testing
- Artillery: Modern, YAML-based configuration
- CloudFlare Workers: Distributed load testing
Monitoring and Alerting
Critical Alerts
- Request queue depth exceeds 50% of maximum
- Request rejection rate above 1%
- Average request wait time exceeds 1 second
- CPU sustained above 85% for 5+ minutes
- Memory throttling activated
Monitoring Tools
- FusionReactor: Real-time request monitoring, thread analysis
- CF Server Monitor: Built-in Enterprise edition monitoring
- New Relic / AppDynamics: APM solutions with alerting
- Prometheus + Grafana: Custom metrics and dashboards
- CloudWatch / Azure Monitor: Cloud-native monitoring