- Add complete dark mode system with theme context and toggle - Implement dark mode toggle component in navigation menu - Add client-side routing with SSR-safe signal handling - Fix language selector styling for better dark mode compatibility - Add documentation system with mdBook integration - Improve navigation menu with proper external/internal link handling - Add comprehensive project documentation and configuration - Enhance theme system with localStorage persistence - Fix arena panic issues during server-side rendering - Add proper TypeScript configuration and build optimizations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
16 KiB
16 KiB
Performance Configuration
Rustelo provides extensive performance tuning options to optimize your application for different workloads and deployment scenarios. This chapter covers how to configure performance-related settings, optimize resource usage, and monitor application performance.
Overview
Performance optimization in Rustelo covers:
- Server Configuration: Worker threads, connection limits, and request handling
- Database Optimization: Connection pooling, query optimization, and caching
- Memory Management: Heap size, garbage collection, and memory pools
- Caching Systems: Multi-level caching strategies and cache invalidation
- Asset Optimization: Static file serving, compression, and CDN integration
- Monitoring & Profiling: Performance metrics and bottleneck identification
Server Performance Configuration
Worker Thread Configuration
[server.performance]
workers = 8 # Number of worker threads (default: CPU cores)
worker_max_blocking_threads = 32 # Max blocking threads per worker
worker_thread_stack_size = 2097152 # Stack size per thread (2MB)
worker_thread_keep_alive = 60 # Keep-alive time for idle threads
max_connections = 10000 # Maximum concurrent connections
connection_timeout = 30 # Connection timeout in seconds
keep_alive_timeout = 65 # Keep-alive timeout
Request Handling
[server.requests]
max_request_size = 52428800 # 50MB max request size
max_header_size = 32768 # 32KB max header size
max_uri_length = 8192 # 8KB max URI length
request_timeout = 30 # Request timeout in seconds
slow_request_threshold = 1000 # Log slow requests over 1 second
max_concurrent_requests = 1000 # Max concurrent requests
Connection Management
[server.connections]
tcp_nodelay = true # Disable Nagle's algorithm
tcp_keepalive = true # Enable TCP keepalive
keepalive_time = 7200 # Keepalive time (2 hours)
keepalive_interval = 75 # Keepalive probe interval
keepalive_probes = 9 # Number of keepalive probes
reuse_port = true # Enable SO_REUSEPORT
backlog = 1024 # Listen backlog queue size
Database Performance Configuration
Connection Pool Optimization
[database.performance]
max_connections = 20 # Maximum pool size
min_connections = 5 # Minimum pool size
acquire_timeout = 30 # Connection acquire timeout
idle_timeout = 600 # Idle connection timeout
max_lifetime = 1800 # Maximum connection lifetime
test_before_acquire = false # Test connections before use
Query Optimization
[database.queries]
statement_timeout = 30000 # Query timeout in milliseconds
slow_query_threshold = 1000 # Log slow queries over 1 second
enable_query_cache = true # Enable query result caching
query_cache_size = 134217728 # Query cache size (128MB)
query_cache_ttl = 300 # Query cache TTL in seconds
prepared_statement_cache_size = 256 # Prepared statement cache size
Database-Specific Optimizations
PostgreSQL
[database.postgresql]
shared_buffers = "256MB" # Shared buffer size
effective_cache_size = "1GB" # Effective cache size
work_mem = "4MB" # Work memory per query
maintenance_work_mem = "64MB" # Maintenance work memory
checkpoint_completion_target = 0.7 # Checkpoint completion target
wal_buffers = "16MB" # WAL buffer size
default_statistics_target = 100 # Statistics target
random_page_cost = 1.1 # Random page cost
SQLite
[database.sqlite]
journal_mode = "WAL" # Write-Ahead Logging
synchronous = "NORMAL" # Synchronous mode
cache_size = 10000 # Page cache size
temp_store = "memory" # Temporary storage in memory
mmap_size = 268435456 # Memory-mapped I/O size (256MB)
page_size = 4096 # Page size in bytes
Memory Management
Heap Configuration
[memory]
initial_heap_size = 134217728 # Initial heap size (128MB)
max_heap_size = 2147483648 # Maximum heap size (2GB)
gc_threshold = 0.75 # GC threshold (75% of heap)
gc_trigger_interval = 60 # GC trigger interval in seconds
Memory Pools
[memory.pools]
buffer_pool_size = 67108864 # Buffer pool size (64MB)
string_pool_size = 16777216 # String pool size (16MB)
object_pool_size = 33554432 # Object pool size (32MB)
connection_pool_memory = 8388608 # Connection pool memory (8MB)
Memory Monitoring
[memory.monitoring]
track_allocations = true # Track memory allocations
memory_usage_threshold = 0.8 # Alert when memory usage > 80%
enable_memory_profiling = false # Enable memory profiling (dev only)
memory_leak_detection = true # Enable memory leak detection
Caching Configuration
Multi-Level Caching
[cache]
enabled = true
default_ttl = 3600 # Default cache TTL (1 hour)
max_memory_size = 268435456 # Max memory cache size (256MB)
cleanup_interval = 300 # Cache cleanup interval (5 minutes)
compression_enabled = true # Enable cache compression
compression_threshold = 1024 # Compress items larger than 1KB
L1 Cache (In-Memory)
[cache.l1]
enabled = true
max_entries = 10000 # Maximum cache entries
eviction_policy = "lru" # Eviction policy: lru, lfu, fifo
segment_count = 16 # Number of cache segments
expire_after_write = 3600 # Expire after write (1 hour)
expire_after_access = 1800 # Expire after access (30 minutes)
L2 Cache (Redis)
[cache.l2]
enabled = true
redis_url = "${REDIS_URL}"
database = 0 # Redis database number
key_prefix = "rustelo:" # Cache key prefix
connection_pool_size = 10 # Redis connection pool size
connection_timeout = 5 # Redis connection timeout
command_timeout = 5 # Redis command timeout
Application-Level Caching
[cache.application]
page_cache_enabled = true # Enable page caching
page_cache_ttl = 1800 # Page cache TTL (30 minutes)
api_cache_enabled = true # Enable API response caching
api_cache_ttl = 300 # API cache TTL (5 minutes)
template_cache_enabled = true # Enable template caching
static_file_cache_enabled = true # Enable static file caching
Asset Optimization
Static File Serving
[assets]
serve_static_files = true # Serve static files
static_file_cache_control = "public, max-age=31536000" # 1 year cache
enable_etag = true # Enable ETag headers
enable_last_modified = true # Enable Last-Modified headers
enable_range_requests = true # Enable range requests
Compression
[assets.compression]
enabled = true
algorithms = ["gzip", "deflate", "br"] # Compression algorithms
compression_level = 6 # Compression level (1-9)
min_file_size = 1024 # Minimum file size to compress
compress_types = [ # MIME types to compress
"text/html",
"text/css",
"text/javascript",
"application/javascript",
"application/json",
"text/xml",
"application/xml"
]
CDN Integration
[assets.cdn]
enabled = false # Enable CDN
cdn_url = "https://cdn.example.com" # CDN base URL
cdn_paths = ["/static", "/assets"] # Paths to serve from CDN
cache_bust_enabled = true # Enable cache busting
cache_bust_strategy = "timestamp" # Strategy: timestamp, hash, version
Performance Monitoring
Metrics Collection
[performance.metrics]
enabled = true
collection_interval = 15 # Metrics collection interval (seconds)
retention_period = 2592000 # Metrics retention (30 days)
high_resolution_metrics = true # Enable high-resolution metrics
Response Time Monitoring
[performance.response_times]
track_percentiles = true # Track response time percentiles
percentiles = [50, 75, 90, 95, 99, 99.9] # Percentiles to track
slow_request_threshold = 1000 # Slow request threshold (1 second)
very_slow_request_threshold = 5000 # Very slow request threshold (5 seconds)
Resource Monitoring
[performance.resources]
monitor_cpu = true # Monitor CPU usage
monitor_memory = true # Monitor memory usage
monitor_disk = true # Monitor disk I/O
monitor_network = true # Monitor network I/O
monitor_connections = true # Monitor connection count
Profiling Configuration
CPU Profiling
[profiling.cpu]
enabled = false # Enable CPU profiling (dev/staging only)
sampling_interval = 10000 # Sampling interval in microseconds
profile_duration = 60 # Profile duration in seconds
output_format = "flamegraph" # Output format: flamegraph, callgrind
Memory Profiling
[profiling.memory]
enabled = false # Enable memory profiling (dev/staging only)
track_allocations = true # Track individual allocations
heap_profiling = true # Enable heap profiling
leak_detection = true # Enable memory leak detection
Database Profiling
[profiling.database]
enabled = false # Enable database profiling
log_all_queries = false # Log all database queries
log_slow_queries = true # Log slow queries only
explain_slow_queries = true # Add EXPLAIN to slow queries
query_plan_cache = true # Cache query execution plans
Environment-Specific Performance
Development Environment
[performance.development]
optimize_for_development = true # Enable development optimizations
hot_reload_enabled = true # Enable hot reloading
debug_mode = true # Enable debug mode
profiling_enabled = true # Enable profiling
reduced_caching = true # Reduce caching for development
Production Environment
[performance.production]
optimize_for_production = true # Enable production optimizations
aggressive_caching = true # Enable aggressive caching
connection_pooling = true # Enable connection pooling
jit_compilation = true # Enable JIT compilation
gc_optimization = true # Enable garbage collection optimization
Load Testing Configuration
Test Parameters
[load_testing]
max_virtual_users = 1000 # Maximum virtual users
ramp_up_time = 60 # Ramp-up time in seconds
test_duration = 300 # Test duration in seconds
think_time = 1 # Think time between requests
Performance Targets
[load_testing.targets]
response_time_p95 = 500 # 95th percentile response time (ms)
response_time_p99 = 1000 # 99th percentile response time (ms)
throughput_rps = 1000 # Requests per second
error_rate_threshold = 0.01 # Maximum error rate (1%)
cpu_usage_threshold = 0.8 # Maximum CPU usage (80%)
memory_usage_threshold = 0.8 # Maximum memory usage (80%)
Performance Optimization Strategies
Database Optimization
[optimization.database]
enable_query_optimization = true
index_optimization = true
query_caching = true
connection_pooling = true
read_replicas = false
database_sharding = false
Application Optimization
[optimization.application]
lazy_loading = true # Enable lazy loading
async_processing = true # Enable async processing
batch_operations = true # Enable batch operations
response_streaming = true # Enable response streaming
request_coalescing = true # Enable request coalescing
System Optimization
[optimization.system]
kernel_bypass = false # Enable kernel bypass (advanced)
numa_awareness = true # Enable NUMA awareness
cpu_affinity = false # Enable CPU affinity
disk_io_optimization = true # Enable disk I/O optimization
network_optimization = true # Enable network optimization
Monitoring and Alerting
Performance Alerts
[alerts.performance]
enabled = true
response_time_threshold = 2000 # Response time alert threshold (2 seconds)
throughput_threshold = 100 # Throughput alert threshold (100 RPS)
error_rate_threshold = 0.05 # Error rate alert threshold (5%)
memory_usage_threshold = 0.9 # Memory usage alert threshold (90%)
cpu_usage_threshold = 0.9 # CPU usage alert threshold (90%)
Health Checks
[health_checks]
enabled = true
check_interval = 30 # Health check interval (seconds)
timeout = 5 # Health check timeout (seconds)
failure_threshold = 3 # Consecutive failures before alert
Benchmarking Configuration
Benchmark Settings
[benchmarking]
enabled = false # Enable benchmarking
benchmark_duration = 60 # Benchmark duration (seconds)
warmup_duration = 10 # Warmup duration (seconds)
concurrency_levels = [1, 10, 100, 1000] # Concurrency levels to test
Performance Baselines
[benchmarking.baselines]
response_time_baseline = 100 # Response time baseline (ms)
throughput_baseline = 1000 # Throughput baseline (RPS)
memory_baseline = 134217728 # Memory baseline (128MB)
cpu_baseline = 0.5 # CPU baseline (50%)
Troubleshooting Performance Issues
Common Performance Problems
-
High Response Times
- Check database query performance
- Review caching configuration
- Monitor resource usage
- Analyze request patterns
-
Memory Issues
- Monitor memory usage patterns
- Check for memory leaks
- Review garbage collection settings
- Optimize memory allocation
-
CPU Bottlenecks
- Profile CPU usage
- Check for inefficient algorithms
- Review worker thread configuration
- Optimize hot code paths
-
Database Performance
- Analyze slow queries
- Check connection pool settings
- Review database configuration
- Optimize indexes
Performance Debugging
[debugging.performance]
enable_detailed_logging = true # Enable detailed performance logging
request_tracing = true # Enable request tracing
sql_query_logging = true # Enable SQL query logging
memory_tracking = true # Enable memory tracking
cpu_profiling = true # Enable CPU profiling
Best Practices
Performance Optimization Guidelines
-
Measure Before Optimizing
- Establish performance baselines
- Use profiling tools
- Monitor key metrics
- Identify bottlenecks
-
Optimize Incrementally
- Make small, measurable changes
- Test each optimization
- Monitor impact
- Rollback if necessary
-
Cache Strategically
- Cache frequently accessed data
- Use appropriate cache levels
- Implement cache invalidation
- Monitor cache hit rates
-
Database Optimization
- Use appropriate indexes
- Optimize query structure
- Configure connection pooling
- Monitor slow queries
Performance Testing
[testing.performance]
automated_testing = true # Enable automated performance testing
regression_testing = true # Enable performance regression testing
load_testing = true # Enable load testing
stress_testing = true # Enable stress testing
Performance Checklist
Pre-Production Performance Review
- Database queries optimized
- Appropriate indexes created
- Connection pooling configured
- Caching strategy implemented
- Static assets optimized
- Compression enabled
- Memory limits configured
- Worker threads optimized
- Performance monitoring enabled
- Load testing completed
- Performance baselines established
- Alerting configured