As far as web server performance is concerned, there are many different factors at play, e.g., application design, network latency/bandwidth, web server configuration, caching, hardware capability, server load, etc. To compare and optimize web server performance under such a wide array of factors, we often perform load test (or stress test) using a web server micro-benchmark tool. A typical benchmark tool injects synthetic workloads into a web server, and measures web server performance in terms of different metrics (e.g., response time, throughput, number of requests per second, etc).
Here are a list of web server benchmark tools available on Linux platforms.
1. ApacheBench (ab): an Apache HTTP server command-line benchmark tool which can send an arbitrary list of (concurrent) web requests. Support for POST/PUT/GET requests, as well as basic password authentication is available. Testing results include requests per second, time per request, transfer rate, connection time statistics (min, max, median, mean), etc. License: Apache v2.0
2. Apache JMeter: a cross-platform GUI program written in Java designe to stress test any web application. It can be used to test the performance of web-server backends powered by server-side languages (e.g., PHP, Java, ASP.NET) or databases (e.g., JDBC, LDAP, MongoDB). It features pluggable testing architecture, extensible data visualization GUI. License: Apache v2.0
3. curl-loader: a command-line application workload generator which can simulate multiple HTTP/HTTPS FTP/FTPS clients. Simulated clients can conduct various tasks, such as authenticated login (POST or GET/POST), GET/POST/PUT requests from batch configuration with probabilistic distribution, FTP passive/active operations, HTTP logoff (POST, GET/POST, GET with cookie), etc. Per-client status and statistics are logged to a file. License: GPLv2
4. FunkLoad: a web server load testing tool written Python. It can perform functional unit testing, as well as stress and longevity testing. Features include GET/POST/PUT/DELETE requests, basic authentication, cookie, HTTPS with SSL/TLS, browser cache emulation, and CSS/image/JavaScript fetching. License: GNU GPL
5. Gatling: an open-source protocol-agnostic load testing tool, used primarily to benchmark HTTP servers. It can simulate multiple users whose web browsing behaviors and scenarios (e.g., login, browse product listings, add a product to cart, check out) can be scripted. License: Apache v2.0
6. Httperf: an HTTP workload generator command-line tool which can generate a number of different types of HTTP traffic, including GET/HEAD/PUT/POST requests, HTTP pipelining, SSL traffic, stateful sessions with cookie, etc. Output includes connection rate, connection time statistics (min, max, median, stddev), request/reply rate, and network throughput. License: GNU GPLv2
7. Siege: an HTTP load testing and benchmarking tool for terminal environment. Support for basic password authentication, cookies, HTTPS with SSL is available. License: GNU GPL
8. Tsung: an open-source multi-protocol stress test tool which can generate different types of workloads for HTTP, SSL, WebDAV, SOAP, PostgresSQL, MySQL, LDAP, XMPP servers. With HTTP server testing, it supports basic requests (GET/POST/PUT/DELETE/HEAD), cookies, authentication with password or oAuth, SOAP, graph visualization and HTML report, multiple IP addresses via IP aliasing, etc. License: GNU GPLv2
9. Web Polygraph: a workload generator tool that can simulate HTTP, FTP, SSL traffic for benchmarking. It comes with HTTP client and server which, together, can stress test caching proxies, web server accelerators, content filters, etc. Support for LDAP credentials, basic/NTLM/Kerberos authentication is available. License: Apache v2.0
10. wrk: a scalable HTTP benchmarking tool which leverages lightweight event notifications like epoll and kqueue. Support for LuaJIT-scripted workloads, HTTP pipelining, authentication token, dynamic requests, and customizable report is available. License: Apache v2.0
Recent Comments