How to use the command "siege" (with examples)
Siege is an HTTP loadtesting and benchmarking tool that allows users to test the performance of web servers by simulating multiple concurrent connections. With Siege, users can test a single URL or a list of URLs, benchmark the performance of these URLs, and customize various aspects of the testing process, such as concurrency and duration.
Use case 1: Test a URL with default settings
Code:
siege https://example.com
Motivation: This use case is ideal for users who want to quickly test the performance of a single URL using the default settings of Siege. It allows users to gain insight into how well a web server can handle a moderate load without much configuration.
Explanation: In this use case, we are using the siege
command followed by the URL we want to test, which is “https://example.com
”. This command will test the given URL using the default settings of Siege, including a concurrency level of 10 and a duration of 1 minute.
Example output:
** SIEGE 4.1.0
** Preparing 10 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 387 hits
Availability: 100.00 %
Elapsed time: 59.99 secs
Data transferred: 0.07 MB
Response time: 0.08 secs
Transaction rate: 6.45 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 9.90
Successful transactions: 387
Failed transactions: 0
Longest transaction: 0.14
Shortest transaction: 0.06
Use case 2: Test a list of URLs
Code:
siege --file path/to/url_list.txt
Motivation: In scenarios where users have a list of specific URLs they want to test, it is more efficient to provide Siege with a file containing these URLs. This use case allows for bulk testing of multiple URLs without needing to specify each one individually in the command.
Explanation: In this use case, we are using the siege
command followed by the --file
flag, which specifies the path to the file containing the list of URLs we want to test. Siege will iterate through the URLs in the file and test their performance one after another.
Example output:
** SIEGE 4.1.0
** Preparing 10 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 236 hits
Availability: 100.00 %
Elapsed time: 40.24 secs
Data transferred: 0.04 MB
Response time: 0.10 secs
Transaction rate: 5.86 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 9.91
Successful transactions: 236
Failed transactions: 0
Longest transaction: 0.15
Shortest transaction: 0.05
Use case 3: Test list of URLs in a random order (Simulates internet traffic)
Code:
siege --internet --file path/to/url_list.txt
Motivation: In order to simulate realistic internet traffic patterns, it is useful to test a list of URLs in a random order. This use case allows Siege to randomly select URLs from the provided list, providing a more accurate representation of actual user behavior.
Explanation: In this use case, we are using the siege
command with the --internet
flag, which enables Siege to select URLs from the provided file in a random order. This simulates the dynamic nature of internet traffic where users access different pages non-sequentially.
Example output:
** SIEGE 4.1.0
** Preparing 10 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 402 hits
Availability: 100.00 %
Elapsed time: 59.98 secs
Data transferred: 0.09 MB
Response time: 0.07 secs
Transaction rate: 6.70 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 9.90
Successful transactions: 402
Failed transactions: 0
Longest transaction: 0.12
Shortest transaction: 0.05
Use case 4: Benchmark a list of URLs (without waiting between requests)
Code:
siege --benchmark --file path/to/url_list.txt
Motivation: Users who want to benchmark the performance of a list of URLs without any delay between requests can use this use case. It allows for fast and continuous testing, giving users insights into the maximum load the web server can handle.
Explanation: In this use case, we are using the siege
command with the --benchmark
flag. This flag instructs Siege to continuously send requests to the URLs listed in the provided file without any wait time between each request. This is useful for stress-testing a web server to determine its maximum capacity.
Example output:
** SIEGE 4.1.0
** Preparing 10 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 4000 hits
Availability: 100.00 %
Elapsed time: 59.98 secs
Data transferred: 0.89 MB
Response time: 0.01 secs
Transaction rate: 66.69 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 9.89
Successful transactions: 4000
Failed transactions: 0
Longest transaction: 0.07
Shortest transaction: 0.00
Use case 5: Set the amount of concurrent connections
Code:
siege --concurrent=50 --file path/to/url_list.txt
Motivation: For users who want to test the performance of a web server with a specific concurrency level, this use case allows the customization of the number of concurrent connections. This way, users can evaluate how the server handles a higher or lower number of concurrent requests.
Explanation: In this use case, we are using the siege
command with the --concurrent
flag, followed by the desired number of concurrent connections. In the code example, we are setting the concurrency level to 50. Siege will then send requests to the URLs specified in the provided file with this concurrency level.
Example output:
** SIEGE 4.1.0
** Preparing 50 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 953 hits
Availability: 100.00 %
Elapsed time: 59.99 secs
Data transferred: 0.16 MB
Response time: 0.01 secs
Transaction rate: 15.88 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 48.58
Successful transactions: 953
Failed transactions: 0
Longest transaction: 0.08
Shortest transaction: 0.00
Use case 6: Set how long for the siege to run for
Code:
siege --time=30s --file path/to/url_list.txt
Motivation: Users who want to limit the duration of the performance test can use this use case. By setting a specific time for the siege to run, users can evaluate the server’s performance within a specific timeframe, which is useful for time-sensitive applications.
Explanation: In this use case, we are using the siege
command with the --time
flag, followed by the desired duration of the test. In the code example, we are setting the duration to 30 seconds. Siege will continuously send requests to the URLs specified in the provided file for the specified duration.
Example output:
** SIEGE 4.1.0
** Preparing 10 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.
Transactions: 176 hits
Availability: 100.00 %
Elapsed time: 29.94 secs
Data transferred: 0.03 MB
Response time: 0.16 secs
Transaction rate: 5.87 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 9.90
Successful transactions: 176
Failed transactions: 0
Longest transaction: 0.37
Shortest transaction: 0.06
Conclusion:
Siege is a versatile tool for loadtesting and benchmarking web servers. Whether you need to test a single URL or a list of URLs, simulate internet traffic, benchmark performance, customize concurrency, or set a specific test duration, Siege provides the necessary features to accomplish these tasks. By understanding the various use cases and how to utilize the command, users can effectively evaluate the performance and capacity of their web servers.