Web Server Performance Benchmarking: How to Calculate Maximum Concurrent Requests for a Medium-Class Server


1 views

When evaluating a server's capacity to handle concurrent requests, we must consider multiple technical factors:

  • Hardware specifications (CPU cores, RAM, disk I/O)
  • Web server configuration (Apache, Nginx, IIS)
  • Application stack efficiency
  • Network bandwidth limitations

For the PRIMERGY TX100 S1 Server running Windows Server 2008 R2 Web Edition, here's how to conduct proper load testing:


# Sample PowerShell script for basic load testing
$url = "http://yourserver.com/testpage"
$maxConcurrent = 1000

1..$maxConcurrent | ForEach-Object -Parallel {
    try {
        $result = Invoke-WebRequest -Uri $using:url -UseBasicParsing
        "$_ : $($result.StatusCode)"
    } catch {
        "$_ : FAILED - $($_.Exception.Message)"
    }
} -ThrottleLimit $maxConcurrent
Metric Acceptable Threshold Measurement Tool
CPU Utilization ≤ 80% sustained Windows Performance Monitor
Memory Usage ≤ 90% of available Task Manager
Network Latency ≤ 100ms response time PingPlotter

For an Apache configuration on similar hardware:


# httpd.conf optimizations for concurrent connections
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 10000

# KeepAlive settings
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

With 50Mbps symmetrical connection:

  • Theoretical maximum: ~6.25MB/s transfer rate
  • Practical maximum after overhead: ~5MB/s
  • For text content averaging 50KB per request: ~100 requests/second at full bandwidth

To achieve 1,000 concurrent requests:

  1. Implement load balancing with at least 2-3 servers
  2. Use content caching (Varnish or Redis)
  3. Consider CDN for static assets
  4. Optimize database queries with prepared statements

When dealing with web server performance, the fundamental question revolves around how many simultaneous requests your infrastructure can handle effectively. The original scenario describes a Fujitsu PRIMERGY TX100 S1 server running Windows Server 2008 R2 Web Edition serving text content over a 50Mbps connection.

Several critical elements determine your server's capacity:

  • Hardware specifications (CPU cores, RAM, disk I/O)
  • Web server configuration (IIS, Apache, Nginx)
  • Application architecture (static vs dynamic content)
  • Network bandwidth and latency

Here's a practical approach using Python with Locust for load testing:


from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 5)
    
    @task
    def load_test(self):
        self.client.get("/sample-page")
        
    @task(3)
    def stress_test(self):
        self.client.get("/heavy-resource")

For text-based content with 50Mbps bandwidth:


# Theoretical maximum calculations:
Bandwidth = 50 Mbps = 6.25 MB/s
Avg page size = 50 KB
Max requests/sec = (6.25 * 1024) / 50 ≈ 128 requests/second

For IIS optimization (Windows Server 2008 R2):




    
    

Essential performance counters to monitor:

  • % Processor Time
  • Memory Available MBytes
  • Web Service Current Connections
  • Network Interface Bytes Total/sec

A similar mid-range server with proper optimization can typically handle:

  • 800-1,200 concurrent connections for static content
  • 200-400 concurrent connections for dynamic content
  • 50-100 concurrent connections for database-heavy operations

Consider implementing these architectural improvements:


# Nginx configuration for load balancing
upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://backend;
    }
}