Taken directly from the authors site at https://www.joedog.org/siege-home: Siege is an http load testing and benchmarking utility. It was designed to let web developers measure their code under duress, to see how it will stand up to load on the internet. Siege supports basic authentication, cookies, HTTP, HTTPS and FTP protocols. It lets its user hit a server with a configurable number of simulated clients. Those clients place the server “under siege.”
This tool becomes extremely useful when you need to get a feel for how a solution will handle under normal or high traffic events. During these simulated traffic events, it may help expose inefficient database queries, CPU intensive code, opportunities for setting up caching, or simply demonstrate the need for having to add additional web servers to increase overall site capacity.
Unlike many other load testers out there, Siege allows you to populate a file with a listing of your URL’s to help generate a more realistic simulation. While Siege can support a number of different tests, I generally keep it simple and basic. I’ll outline how I utilize it below.
First, install siege:
# CentOS 6 / RedHat 6 [[email protected] ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [[email protected] ~]# yum install siege # CentOS 7 / RedHat 7 [[email protected] ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm [[email protected] ~]# yum install siege # Ubuntu 12.04 / Ubuntu 14.04 [[email protected] ~]# apt-get update [[email protected] ~]# apt-get install siege
Now click around your site recording about 10 or more URL’s. Make sure it includes various sections of your site that people would likely be visiting. For example, if running an e-commerce site, be sure to include the base domain several times since that will be accessed most often usually. But also include several landing pages, a couple of products, and maybe the shopping cart. For example:
[[email protected] ~]# vim /root/site.txt http://example-store.com http://example-store.com http://example-store.com/cameras http://example-store.com/electronics http://example-store.com/home-decor/decorative-accents http://example-store.com/home-decor/decorative-accents/herald-glass-vase http://example-store.com/apparel/shirts http://example-store.com/home-decor/books-music http://example-store.com/home-decor/books-music/a-tale-of-two-cities.html http://example-store.com/sale.html http://example-store.com http://example-store.com
You should now be able to run your load test:
[[email protected] ~]# siege -c50 -d3 -t30M -i -f /root/site.txt
This load test will be sending 50 concurrent connections, with a random delay between 1 and 3 seconds, lasting for 30 minutes against the url’s posted in /root/site.txt.
A couple quick notes about the flags:
-c, --concurrent=NUM CONCURRENT users, default is 10 -d, --delay=NUM Time DELAY, random delay before each request between 1 and NUM. (NOT COUNTED IN STATS) -t, --time=NUMm TIMED testing where "m" is modifier S, M, or H ex: --time=1H, one hour test. -i, --internet INTERNET user simulation, hits URLs randomly. -f, --file=FILE FILE, select a specific URLS FILE.
While the simulated traffic test is running, things you will want to watch your solution for include:
– Observe the CPU, Memory, IO, and Memory usage of the servers.
– Check the database to see if there are any intensive queries consistently running, perhaps indicating the need for redis or memcached.
– Check the MySQL slow query log to see if there are queries that may need a table index, or otherwise need to be optimized.
– Check that any caching software you have installed is returning a good hit rate.
– Ensuring the site remains online during the tests.
Sometimes you want to load test a website that has a username and password prompt provided by an htaccess file. To allow siege to authenticate, do the following:
[[email protected] ~]# auth=`echo -n 'username:password' | openssl base64` [[email protected] ~]# siege -c50 -d3 -t30M --header="Authorization:Basic $auth" -i -f /root/site.txt