As far as web server performance is concerned, there are many different factors at play, e.g., front-end application design, network latency/bandwidth, web server configuration, server-side in-memory cache, raw hardware capability, server load of shared hosting, 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 or replays real-world traces to a web server, and measures web server performance and scalability in terms of varying metrics (e.g., response time, throughput, number of requests per second, CPU load, etc).
For those of you who want to find out how your web server or web service will measure up under different workload conditions, here are a list of web server benchmark tools available on Linux platforms.
ApacheBench (ab) is a standard command-line web server benchmark tool bundled with Apache HTTP server. It 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. Last update: 12/2015. License: Apache v2.0.
2. Apache JMeter
Apache JMeter is a cross-platform Java-based GUI program designed 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 provides highly pluggable testing architecture via extensible data visualization GUI. Last update: 03/2015. License: Apache v2.0.
curl-loader is 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. Last update: 01/2012. License: GPLv2.
Gatling is an open-source protocol-agnostic load testing tool primarily used to benchmark HTTP servers and web services. Using a lightweight asynchronous testing engine, it can easily simulate thousands of concurrent users whose web browsing behaviors and scenarios (e.g., login, browse product listings, add a product to cart, check out) are independently scripted. It supports real-time reports via the Graphite protocol, and can be integrated via extensions with other third-party building tools such as Maven, Jenkins, SBT. Last update: 12/2015. License: Apache v2.0.
Httperf is 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. Last update: 12/2015. License: GNU GPLv2.
Pylot is a Python-based performance and scalability testing tool for web services. It generates multi-agent workload scenarios based on test cases defined in an XML file, and displays stats and error reporting results in real-time. It supports HTTPS/SSL, cookie handling, regular expression based response verification, multi-threading, console/GUI modes. Last update: 07/2009. License: GNU GPLv3.
Siege is an HTTP load testing and benchmarking tool for terminal environment. Support for basic password authentication, cookies, HTTPS with SSL is available. Last update: 06/2015. License: GNU GPL.
9. The Grinder
The Grinder is a Java-based multi-threaded test framework which can perform load test and functional test of various application and network protocols written in Java APIs, including as HTTP servers, SOAP, XML-RPC, REST web services, JMS, JDBC, RMI, and POP3/SMTP/LDAP. It supports dynamic loading and monitoring of test scripts written in Jython and Clojure languages, and allows injecting load from multiple machines in the distributed fashion. Its HTTP support includes cookie handling, SSL, connection rate-limiting, trace record and replay, proxy, etc. Last update: 04/2015.
Tsung is 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. Last update: 06/2015. License: GNU GPLv2.
11. Web Polygraph
Web Polygraph is 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. Last update: 10/2014. License: Apache v2.0.
wrk is 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. Last update: 11/2015. License: Apache v2.0.
Subscribe to Xmodulo
Do you want to receive Linux FAQs, detailed tutorials and tips published at Xmodulo? Enter your email address below, and we will deliver our Linux posts straight to your email box, for free. Delivery powered by Google Feedburner.
Did you find this tutorial helpful? Then please be generous and support Xmodulo!