Siege Home

ABOUT SIEGE

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 and HTTPS protocols. It lets its user hit a web server with a configurable number of simulated web browsers. Those browsers place the server “under siege.”

PLATFORM SUPPORT

Siege was written on GNU/Linux and has been successfully ported to AIX, BSD, HP-UX and Solaris. It should compile on most System V UNIX variants and on most newer BSD systems. Because Siege relies on POSIX.1b features not supported by Microsoft, it will not run on Windows. Of course you can use Siege to test a Windows HTTP server.

NEWS & RELEASE INFORMATION

SIEGE-3.0.7 This release fixes a bug introduced in siege-3.0.6. Rather than strictly adhere to the RFC, siege will construct an absolute URL from a relative one. While this is convenient it missed a usecase. Siege-3.0.6 barfs on Location: http://localhost  All siege 3.0.6 users should upgrade to 3.0.7.

SIEGE-3.0.6 With this release, siege changes the way it handles –reps=once. It now divides a urls.txt file evenly among all its users, and each URL in the file is hit exactly once. This release also includes several fixes and a documentation update.

SIEGE-3.0.5 This release addresses another inconsistency between the HTTP standard and practice. While RFC 2616 allows a port designation in the Host header, it confuses too many implementations for Siege to continue to send it. This version also fixes several significant bugs. All Siege users should update to this version.

SIEGE-3.0.4 Although RFC 2616 specifies that Location directives must contain an absolute URI, most Web clients normalize relative URIs. This release adds conventional compliance with relative URI handling. Ironically, it also includes a new default user-agent so that field is in compliance with RFC 2616.

SIEGE-3.0.3 This release features one prominent new feature, URL escaping. Reserved characters are %-encoded as per RFC 3986. This release also features numerous bugfixes such as improved variable evaluation in the urls.txt file, dynamic Accept-Encoding, improved siegerc parsing, and several memory fixes.

SIEGE-3.0.0 This is the first major siege release in over a decade. Significant portions were rewritten in order to add support for additional protocols. This release adds limited support for FTP. You can get and put files to a server. FTP is invoked automatically based on the URL scheme, i.e.,  ftp://

SIEGE-2.74 This is minor bug fix that corrects verbose output formatting. Debug messages were creeping into verbose mode. Oh, noes! What should we do? If you’re a 2.73 user who doesn’t care for debug annoyances you should probably upgrade to version 2.74.

SIEGE-BETA – Developers should submit patches that are diff’d against the latest beta.

“This is an excellent application that does something expensive suites don’t. ie. It does what the users expects it to do, and does it simply.”
— Sgt. Scrub

Posted in | 139 Comments

139 Responses to “Siege Home”

  1. stefano says:

    Hi, for my test, I tried to use siege with dvwa app (open source app with security problem), in this application there is a login page with POST method.
    I wrote in siegerc file, the parameter

    login-url = http://192.168.56.101/index.php?user=admin&pass=pass

    with command:
    siege -d1 -c50 -i -f /home/stefano/url.txt
    receive always http 302 or 400
    I think to have some problems with authentications. Can you help me?

    Sorry for my English…
    Stefano

  2. Daniel says:

    Hi

    When I’m trying to setup 400 concurrent users I’m getting “[fatal] unable to allocate memory for 400 simulated browser: Cannot allocate memory”
    The host has 8GB or RAM and and I tried with 16GB as well. Do you know how can I actually increase the concurrency number? Thanks.

    Daniel

  3. jan says:

    I have extended siege 2.72 so it supports more http methods.
    I also added a cmd line option to override the default Content-Type and did some other minor changes.

    The patch can be found on github as gist 2919579:
    https://gist.github.com/2919579

    It would be great if the patch could be incorporated into some future official release.

    • Jeff Fulmer says:

      For people interested in Jan’s changes, they’ve been implemented starting with version 2.73b3. If you’re adverse to beta software, look for them in version 2.74.

      2.73b3 adds a new implementation of -g/–get which builds on Jan’s work. In .siegerc you can set the HTTP method for siege gets. The two options are HEAD and GET. If you select HEAD (default), then siege simply pulls down the headers. If you select GET, then you get the full page.

      I’ve wanted to implement -g/–get like that for quite some time so I appreciate the fact that Jan laid the ground work.

  4. luke says:

    Independent of jan, I also did some quick and dirty hack a couple of weeks ago to enable DELETE method.

    I think jan’s solution is much better than mine –which created a copy of the http_get (https://gist.github.com/2934366). Hope to see jan’s enhancement in the next official release soon.

    • Jeff Fulmer says:

      At this point I plan to incorporate Jan’s solution. I should have a new beta soon. If that tests out, we’ll add it to the next release. I’ve got a couple bug fixes that need to be incorporated as well. If you un-comment proxy-login but don’t give it a value, it dumps core. (That probably happens for other directives as well.)

  5. AndrewR says:

    Thanks for a very useful looking tool as well as tips on how to use it.

    I’d love to have an option to specify the target IP address (or perhaps DNS name) separately from the URL I’m requesting, that way I can test a non-live server prior to renumbering it to its ‘live’ IP address.

    My particular use case is in fact for a master/slave pair, where I want to compare the master and slave performance: Both are in fact up and running, but the DNS will be set to point to the master server.

    • Jeff Fulmer says:

      I’m not sure there’s enough interest in this feature to merit the time necessary to implement it. Most people will simply make /etc/hosts file entries. But I’m willing to entertain additional thoughts on the matter….

    • eMBee says:

      don’t know if that feature is new, but i just used variables for that in the urls file:

      hostname=test
      http://${hostname}/…

      greetings, eMBee.

  6. Eduardo says:

    The server is now under siege…[error] descriptor table full sock.c:108: Too many open files
    [error] descriptor table full sock.c:108: Too many open files
    [error] descriptor table full sock.c:108: Too many open files
    libgcc_s.so.1 must be installed for pthread_cancel to work
    Aborted

    how can i fix this ?

    • Jeff says:

      The error message is telling you exactly what’s wrong. You opened too many files. You have two choices: tune the system running siege or reduce the number of concurrent users.

      • Eva Quirinius says:

        I also get “libgcc_s.so.1 must be installed for pthread_cancel to work” (on Ubuntu 12.04 64-bit). And just with the default siege settings, so 15 concurrent sessions.

        But … it only happens when I use the “-l ” option. Not when I use a plain siege command line.

        So, are you sure it is cause by too may open files / connections?

        • khrys says:

          hi!

          I get that error too on Centos 6.5 (64bits). I do have libgcc_s.so.1 in /lib64/ and a symlink in /lib/. And for the sake of it, since it is suggested in a number of places, I added /lib to /etc/ld.so.conf and then launched ldconfig.

          This error comes with defau;t siege settings (15 concurrent users). However, it doesn’t look like a siege issue, but maybe a pthread issue as described here:
          https://bugs.launchpad.net/ubuntu/+source/gcc-3.3/+bug/40285

          I hope this gets fixed soon.

    • John Saxton says:

      Hi Eduardo,

      I got the same error when I made a silly mistake. I typed:
      siege -b -t 30S -c 4 http://localhost/ –log=main_4.txt

      instead of:
      siege -b -t 30S -c 4 –log=main_4.txt http://localhost/

      Switching the order of the URL and –log parameter fixed my problem.

      • Jeff Fulmer says:

        That’s curious. Siege uses GNU’s getopt and the order in which the URL appears shouldn’t matter. I’ll re-examine that.

        • Nicolas Mendoza says:

          nicolasm@dell-latitude:~$ siege -fv dev.touch-urls
          ** SIEGE 3.0.5
          ** Preparing 15 concurrent users for battle.
          The server is now under siege…[error] descriptor table full sock.c:119: Too many open files
          [error] descriptor table full sock.c:119: Too many open files
          [error] descriptor table full sock.c:119: Too many open files
          libgcc_s.so.1 must be installed for pthread_cancel to work
          Avbrutt (SIGABRT) (core dumped)

          nicolasm@dell-latitude:~$ siege -f -v dev.touch-urls

          same as above

          nicolasm@dell-latitude:~$ siege -v -f dev.touch-urls

          works, without error above.

          So, yes, I had my ordering wrong, but running out of descriptors on a syntax error, is not correct I guess, so getopt calls might be wrong and/or opening non-sensical URLs might trigger this.

          • Jeff Fulmer says:

            I suspect it’s treating -v as the parameter to -f and dev.touch-urls as a command line URL. I’ll make note but I can assure you that you can find more ways to bork it than I have time to correct ;-)

      • Vijay says:

        WoW. I have been struggling to find the issue as the error is misleading. But I had a similar problem. Thanks a ton.

  7. jiajun says:

    thanks for a very useful tool for load testing and benchmarking.

    but i want to know how to use –header option.
    on my client i have no permission to edit /etc/hosts .
    so i want to use the –header option ,but it looks doesn’t working.

    sorry for my english.

    here is my use:
    siege -c 400 -t 1m -b -i –log=”stress.test” -f 1line –header=”192.168.127.31: http://www.jiajuntuiguang.xxx.com

    thank 4 reply.

    • jiajun says:

      i misunderstand the -H option, i know what does it really mean.

      thanks :D

      • Jeff Fulmer says:

        If you’re using a recent version of siege, you can set the host with -H. How does that work? Here’s an example where I do a –get request using the IP address and a Host: header:

        LT $ siege -g -H “Host: http://www.joedog.orghttp://69.55.236.229/siege-home/
        HEAD /siege-home/ HTTP/1.0
        Accept: */*
        Accept-Encoding:
        User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.73b4)
        Host: http://www.joedog.org
        Connection: close

        HTTP/1.1 200 OK
        Date: Tue, 14 Aug 2012 12:43:45 GMT
        Server: CERN/1.0A
        X-Powered-By: PHP/5.2.5
        Expires: Tue, 07 Aug 2012 12:09:16 GMT
        Last-Modified: Tue, 14 Aug 2012 12:43:45 GMT
        Cache-Control: no-cache, must-revalidate, max-age=0
        Pragma: no-cache
        Set-Cookie: PHPSESSID=3eis8da064o56kh913ie0cp9k7; path=/
        X-Pingback: http://www.joedog.org/xmlrpc.php
        Connection: close
        Content-Type: text/html; charset=UTF-8

  8. Reik says:

    2.73b3 provided an option to sent PUT request with a Content-Type header. How would you specify a url in urls.txt that should issue a PUT sending “Content-Type”: “application/json” and this example data: {“foo”:”bar”, “score”:10} – is this even possible from the urls file yet?

    • Jeff Fulmer says:

      That’s not available through the urls.txt file yet and I’m not sure how we can do that short of adding a mime types option. Any suggestions?

  9. John Nelson says:

    Hi,

    I am running into a buffer overflow detected ***: siege terminated error when running siege with over 600 concurrent users. The machine type does not seem to matter. ive run this on a 8gig ec2 instance and 615mb memory instances. it appears that there is just some hard limit on concurrent users?

    • Miracle says:

      I was caught in the same problem:
      *** buffer overflow detected ***: siege terminated
      I just changed the max number of open files and ran the siege -c 1500 -r 1 http://… and found the above problem.How did you solver it? looking forward to someone’s reply!

  10. gcmalloc says:

    hi, I failed into a segfault triggered by :
    siege google.ch –silence
    Can you look into it ?

  11. Clay says:

    Hi,

    Is there a setting to change the precision of the elapsed time? Currently it reports out to 1/100th of a second. Can this be customized to go to 1/1000th or even finer?

    Thanks, this is a great tool!

  12. michael says:

    I just installed Siege and it all seems to work fine but when i try to post some arguments it only posts the first one. This is clear when you tail the logs of the webserver.

    I installed Siege on Mac osx mountain lion using homebrew.

    The command i am trying to run is the following:

    siege http://url/index.php POST authname=username&authpass=password -d1 -r10 -c25

    What is going wrong in my approach?

    I want to add that you use a -u argument on the website but that doesn’t work, this is also not mentioned in the man pages.

    • Jeff Fulmer says:

      Michael, you’re problem is less a siege issue than a command line problem. It’s treating components of your URL as arguments. To solve this, wrap the URL in quotes like this:

      “http://url/index.php POST name=user&pass=pass”

  13. Jeremy.P says:

    Hi, I am testing Siege in a home virtual environment in preparation for an upcoming project.

    I have installed it on an Ubuntu 12.10 VM guest through the official Ubuntu repos but for some reason it does not want to connect to my test web server (on the same 10.10.10.xx LAN) – I can ping the web server, I can connect to it via web browser and telnet on port 80 – all should be fine.

    HOWEVER, when running “siege -g 10.10.10.50″, Siege is attempting to connect to the localhost (127.0.0.1) on port 80 and passing 10.10.10.50 in the Host header. I saw this via Wireshark.

    What am I doing wrong? I tried various combinations of the command but still failed to get Siege to connect. Thanks in advance!

    • Jeremy.P says:

      Still trying and still getting localhost trying to connect to localhost.

      siege -g “http://10.55.55.50″
      [error] socket: unable to connect sock.c:222: Connection refused

      Wireshark shows a connection attempt to 127.0.0.1:80…I am very confused.
      Thanks and sorry for the double comments!

  14. Jeremy.P says:

    Just created an alias in the hosts file for webserver = 10.55.55.50 and when running siege -g “http://webserver” it is still connecting to 127.0.0.1. Pinging webserver works find and the address is resolved from the hosts file.

    However, if I run the same Siege command using http://google.com or other public domains it gathers the headers without any issue. What am I doing wrong?

    • Jeff says:

      Siege resolves an address with gethostbyname which means it relies on the OS’s resolver. I would use name resolution tools like dig, host or nslookup to get to the root of the problem….

  15. Jeremy P says:

    Hi Jeff, thanks for the quick response. Just to confirm:

    1. It is NOT possible to use an IP address in the URL?
    2. Siege will not use the hosts file for mapping?

    I have made more attempts at getting it to work but it just throws up a “Connection Refused” even with edits in the hosts file allowing me to use a hostname instead of IP. I really need to get it working with IP addresses in order to target a specific web server. Thanks again, much appreciated.

  16. Jeremy P says:

    From some quick research: “The domain name queries carried out by gethostbyname() and gethostbyaddr() use a combination of any or all of the name server named(8), a broken out line from /etc/hosts, and the Network Information Service (NIS or YP), depending upon the contents of the order line in /etc/host.conf. The default action is to query named(8), followed by /etc/hosts.”

    I don’t quite understand “broken out line from /etc/hosts” – does it require a special format mapping? Thanks again!

  17. abdelouahab says:

    first thank you for this jewel.
    i’m using opensuse 12.2 64bits with 8 giga ram, and i run into Segmentation Fault error when i raised ulimit to 10000, why this is happening?

    • Jeff Fulmer says:

      It’s not clear why it’s segfaulting but that’s a lot of clients. If you could run it in a debugger and post the back trace, I’d appreciate it.

  18. Denis says:

    Hi Jeff!

    Thanks for such great tool.
    I wrote the patch which adds support of 307 redirect handling (report a message to the given location).

    https://gist.github.com/sherman/5063949

  19. Kornexl says:

    siege (2.72 and 2.75) does not respect the -l (–log=) flag on the commandline. It always appends the result to $prefix/var/siege.log

  20. Eric Marden says:

    Hi Jeff,

    Love Siege and have been using it for years. Thanks for all the hard work you’ve put into it, it’s

    I noticed something a little funky and I’m not sure if there is a way around it…

    When setting the Accept header via the -H flag, this header is merged with the default value of */*, when testing a Content Negotiation aware API I’m developing. I can likely set a default on my side, but would like to simulate a client that is requesting only `application/json` content. That way the json serializing routines are used during the building of the response (and are reflected in the times it takes my service to respond).

    If there’s a way to override headers completely or if there is something I missed in the man page, let me know.

    Thanks again!

    • Jeff Fulmer says:

      We can probably classify that as a bug. I’ll try to fix it in a timely fashion.

    • Jeff Fulmer says:

      Siege 2.78 is now available and it should allow you to override the default Accept header with the command line option:

      $ siege -H “Accept: application/json” -g http://www.joedog.org
      HEAD / HTTP/1.1
      Host: http://www.joedog.org
      Accept-Encoding:
      User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
      Accept: application/json
      Connection: close

      HTTP/1.1 200 OK
      Date: Mon, 11 Mar 2013 14:15:31 GMT
      Server: CERN/1.0A
      X-Powered-By: PHP/5.2.5
      Expires: Mon, 04 Mar 2013 13:50:38 GMT
      Last-Modified: Mon, 11 Mar 2013 14:15:31 GMT
      Cache-Control: no-cache, must-revalidate, max-age=0
      Pragma: no-cache
      Set-Cookie: _wp_session=4eb6accb681e218c68fca3d4903be266%7C%7C1363011639%7C%7C1363011279; expires=Mon, 11-Mar-2013 14:20:39 GMT; path=/
      X-Pingback: http://www.joedog.org/xmlrpc.php
      Connection: close
      Content-Type: text/html; charset=UTF-8

      You can download it here: http://www.joedog.org/pub/siege/

  21. Hey, I often use Siege for some basic testing. One nice change would be that -v would show individual elapsed times with microseconds. When benchmarking static files it’s not uncommon to have 0.01 or 0.00 as values. As satisfying as it is to see something with zero seconds having microsecond resolution would help with rendering charts.

  22. Vencent says:

    Hey, i need to send some http headers with the GET/POST method. I know it is ok to send a header like below:
    siege -c 10 -r 1 –header=”X-CPU: arm/x86″ http://***.com/***.json
    but how to deal with if i want to send headers, seem it failed with below command;
    siege -c 10 -r 1 –header=”X-CPU: arm/x86;X-SIGN:12345678″ http://***.com/***.json
    Can you give me some advice? And is there a sample command to siege the POST method?

  23. karatedog says:

    I read the documentation but cannot find where I could turn off colored output, and I usually use a terminal with black background and the dark blue color output looks ugly.

  24. wangbin579 says:

    tcpcopy: a TCP-based application traffic replay solution.
    fit for real testing, performance testing, stability testing, stress testing, load testing, smoke testing, etc

    An example:
    http://globaldev.co.uk/2013/01/migrating-memcached/

  25. wangbin579 says:

    an online request replication tool, also a network traffic replay tool, fit for real testing, performance testing, stability testing, stress testing, load testing, smoke testing, etc

    An example:
    http://globaldev.co.uk/2013/01/migrating-memcached/

  26. Vasya says:

    Dear Jeff!
    You have not been released SIEGE-3.1.1, so maybe you’d like to fix the NEWS section.

  27. Rob Olmos says:

    I’m having an issue with 3.0.1 sending POST data as 000000 (and so on, one 00 per character). Mysite.com is spoofed.

    siege -g “http://mysite.com/user POST test=test”

    POST /user HTTP/1.1
    Host: mysite.com
    Accept: */*
    Accept-Encoding:
    User-Agent: JoeDog/1.00 [en] (X11; I; Siege 3.0.1)
    Connection: close
    Content-type: application/x-www-form-urlencoded
    Content-length: 4

    HTTP/1.1 200 OK

    There’s no output after the length which should be the POST data. In tshark it shows 00 per character. Any ideas of what I’m doing wrong?

    Thanks

  28. Ken says:

    I have siege 2.72 running on a VM with no issues.
    I installed 3.0.1 on 2 different Dell servers with dual quad core xeon’s and both systems always produce error messages:
    [error] string has no value!: Transport endpoint is already connected

    limits and configurations are the same as the VM 2.72 system.
    should I try 2.72 on these servers? how do I go backward from 3.0.1?

    • Jeff Fulmer says:

      Could you try the latest beta and see how that goes? 3.0.1 is buggy

      http://www.joedog.org/pub/siege/beta/siege-3.0.3-beta3.tar.gz

      • Ken says:

        Thanks, I tried the following: (still same problem)
        [root@NGODtools_142 siege]# siege -d 1 -c 10 -r 1 http://10.76.112.52/media/mrobinson-spinnaker-mss.isml/Manifest
        ** SIEGE 3.0.3-beta3
        ** Preparing 10 concurrent users for battle.
        The server is now under siege…[error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected
        [error] string has no value!: Transport endpoint is already connected done.

        Transactions: 30 hits
        Availability: 100.00 %
        Elapsed time: 2.40 secs
        Data transferred: 0.06 MB
        Response time: 0.08 secs
        Transaction rate: 12.50 trans/sec
        Throughput: 0.03 MB/sec
        Concurrency: 1.06
        Successful transactions: 30
        Failed transactions: 0
        Longest transaction: 0.29
        Shortest transaction: 0.00

        FILE: /usr/local/var/siege.log
        You can disable this annoying message by editing
        the .siegerc file in your home directory; change
        the directive ‘show-logfile’ to false.
        [error] unable to create log file: No such file or directory
        [root@NGODtools_142 siege]# ulimit -a
        core file size (blocks, -c) 0
        data seg size (kbytes, -d) unlimited
        file size (blocks, -f) unlimited
        pending signals (-i) 55296
        max locked memory (kbytes, -l) 32
        max memory size (kbytes, -m) unlimited
        open files (-n) 10240
        pipe size (512 bytes, -p) 8
        POSIX message queues (bytes, -q) 819200
        stack size (kbytes, -s) 8192
        cpu time (seconds, -t) unlimited
        max user processes (-u) 55296
        virtual memory (kbytes, -v) unlimited
        file locks (-x) unlimited
        [root@NGODtools_142 siege]# cat /proc/sys/net/ipv4/tcp_tw_recycle
        1
        [root@NGODtools_142 siege]# cat /proc/sys/net/ipv4/tcp_tw_reuse
        1

  29. Howdy! I know this is kinda off topic however , I’d figured I’d ask.
    Would you be interested in exchanging links or maybe guest writing a blog article or vice-versa?
    My website addresses a lot of the same subjects as yours and I feel we could greatly benefit from each
    other. If you happen to be interested feel free to shoot me an email.
    I look forward to hearing from you! Terrific blog by the way!

    My blog: Company Of Heroes 2 Key Generator Serial Code

  30. gdi67 says:

    Is there anyway to ignore the failure in siege? I’m currently testing WAF and facing a lot of error.

    • Jeff Fulmer says:

      This question is vague. Is siege quitting because you’ve run up against the failure limit? If that’s the case, you can just change the limit to some very large number in $HOME/.siegerc

      failure = 2147483647

      (I doubt we check the int limit so don’t exceed that number)

  31. gdi67 says:

    one more question, How can we measure RTT (Round Trip Time) with siege? Does it Response time in seige results?

  32. gdi67 says:

    one more question, How can we measure RTT (Round Trip Time) with siege? Does it Response time in siege results?

  33. […] siege, here’s a benchmark of 100 concurrent users hammering away at the site, as fast as possible, […]

  34. R C says:

    Hi,

    I am new in using Siege load & stress testing tool.

    When I run the command like the below one

    siege -c10 http://somedomain.com

    The output never stops scrolling even after 10 requests.
    It keeps on going for few hundreds of hits.
    It does not show any error messages.
    Every time I have to manually stop the process by Ctrl+C.

    Why is it like this?

    I am using Siege 3.0.3 from CentOS 6.4.

    Another question, does sieze support HTTPS protocol?

    Thanks in advance.

  35. […] Il a mis en place sur un réseau clos, un portable, un routeur et un Raspberry Pi afin d’éviter toutes les interférences par d’autres systèmes. Le logiciel utilisé pour les mesures est Siege, disponible ici. […]

  36. R C says:

    Thanks for the reply.

    With the usage of “-r and -t” the constant non stopping result scrolling now have stopped.

    So far using this tool the HTTP sites testing is OK.

    But, I am facing certain issues (all described below) while dealing with the HTTPS sites.

    As suggested by you, I have compiled siege with openssl.

    For doing this, I followed the procedure mentioned in the below site.
    http://drewsymo.com/how-to/installing-siege-stress-tester-on-centos-6-3/

    In brief, I ran the following commands for compiling sieze with openssl.

    cd /opt
    wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
    tar -zxvf openssl-1.0.1e.tar.gz
    cd siege-3.0.3.tar.gz
    ./configure -with-ssl=/opt/openssl-1.0.1e
    make && make install

    I did not got any warning or errors in the above steps.

    But, even after this I am getting the below reults while dealing with HTTPs sites with this tool.

    ISSUE#1

    Whenever I set many hits like 1000, 2000 I get the below error.

    “Segmentation fault (core dumped)”

    Kindly note I have already ran the “ulimit -n 10000″ command to increase the number of open files.

    But, this did not helped.

    ISSUE#2

    [root@localhost ~]# siege –user-agent=”Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0″ -c10 -r1 -t50S someHTTPSdomain.com
    [error] CONFIG conflict: selected time and repetition based testing: No such file or directory
    defaulting to time-based testing: 50 seconds
    ** SIEGE 3.0.3
    ** Preparing 10 concurrent users for battle.
    The server is now under siege…
    HTTP/1.1 302 0.09 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.11 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.08 secs: 0 bytes ==> GET /
    HTTP/1.1 302 3.09 secs: 0 bytes ==> GET /
    …………………
    …………………
    …………………

    Then after many such hits exceeding the above defined 10 hits, I had to press Ctrl+C.

    After that, it shows,

    ^C
    Lifting the server siege… done.

    Transactions: 0 hits
    Availability: 0.00 %
    Elapsed time: 18.70 secs
    Data transferred: 0.00 MB
    Response time: 0.00 secs
    Transaction rate: 0.00 trans/sec
    Throughput: 0.00 MB/sec
    Concurrency: 3.19
    Successful transactions: 30
    Failed transactions: 28
    Longest transaction: 12.10
    Shortest transaction: 0.07

    FILE: /usr/local/var/siege.log
    You can disable this annoying message by editing
    the .siegerc file in your home directory; change
    the directive ‘show-logfile’ to false.
    [root@localhost ~]#

    Why the transactions showing 0 hits always in case of HTTPS sites?
    Even after specifying “-c10 -r1″ why the scrolling output not stopping for HTTPS sites?
    Also, why all the HTTP responses are showing 30X for HTTPS sites?
    Why this error “[error] CONFIG conflict: selected time and repetition based testing: No such file or directory defaulting to time-based testing: 50 seconds” showing?

    Anyway, if I remove the -t50S from the above command I do not get the error “error “[error] CONFIG conflict: selected time and repetition based testing: No such file or directory defaulting to time-based testing: 50 seconds”. But, still it shows the transactions as 0 hits. See below.

    [root@localhost ~]# siege –user-agent=”Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0″ -c10 -r1 someHTTPSdomain.com
    ** SIEGE 3.0.3
    ** Preparing 10 concurrent users for battle.
    The server is now under siege…
    HTTP/1.1 302 0.08 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.08 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.09 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.11 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.07 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.09 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.08 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.08 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.08 secs: 0 bytes ==> GET /
    HTTP/1.1 302 0.10 secs: 0 bytes ==> GET /
    done.

    Transactions: 0 hits
    Availability: 0.00 %
    Elapsed time: 2.14 secs
    Data transferred: 0.00 MB
    Response time: 0.00 secs
    Transaction rate: 0.00 trans/sec
    Throughput: 0.00 MB/sec
    Concurrency: 0.40
    Successful transactions: 10
    Failed transactions: 10
    Longest transaction: 0.11
    Shortest transaction: 0.07

    FILE: /usr/local/var/siege.log
    You can disable this annoying message by editing
    the .siegerc file in your home directory; change
    the directive ‘show-logfile’ to false.
    [root@localhost ~]#

    Another thing, I noticed if I prefix the HTTPS URL with a “https://” like the below, I get output like this.

    [root@localhost ~]# siege –user-agent=”Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0″ -c10 -r1 https://someHTTPSdomain.com
    ** SIEGE 3.0.3
    ** Preparing 10 concurrent users for battle.
    The server is now under siege…
    done.

    Transactions: 0 hits
    Availability: 0.00 %
    Elapsed time: 1.06 secs
    Data transferred: 0.00 MB
    Response time: 0.00 secs
    Transaction rate: 0.00 trans/sec
    Throughput: 0.00 MB/sec
    Concurrency: 0.00
    Successful transactions: 0
    Failed transactions: 10
    Longest transaction: 0.00
    Shortest transaction: 0.00

    FILE: /usr/local/var/siege.log
    You can disable this annoying message by editing
    the .siegerc file in your home directory; change
    the directive ‘show-logfile’ to false.
    [root@localhost ~]#

    Simply, no HTTP or other response messages.

    I am confused with these results while dealing with the HTTPS sites. Not clear whether I did anything wrong while issuing the commands or it’s some bug or limitation of this tool.

    I like to mention that in my above commands I have used a valid Windows 8 (using a Firefox browser) useragent by using “–user-agent=” in all the commands.
    I did like this only to replace the default Siege useragent which is “JoeDog/1.00 [en] (X11; I; Siege 3.0.3)” as this default Siege useragent might be blacklisted in many webservers (not so sure).

    Kindly guide. I apologize for writing a lengthy reply.

    Thanks in advance.

    • Jeff Fulmer says:

      I put out betas for a reason: I wish people would use them.

      This is a bug. What’s happening is your server is replying with HTTP-302 and it’s just providing a path; something like:

      Location: haha/myfile.html

      I recommend you go back to the latest 2.xx until I fix this.

      UPDATE: Actually, this may have never worked. This bug was probably in siege for as long as it existed. It will probably fail on 2.xx as well.

      UPDATE NUMBER 2: Technically, this isn’t a bug. According to the spec, the server should respond “Location: absoluteURI” Unfortunately, just about every browser follows “Location: path/file” so I suppose I should break the spec and add it.

  37. […] 然后就可以使用了,官网是http://www.joedog.org/siege-home/,打开速度比较慢,manual可以在http://linux.die.net/man/1/siege找到。虽然英文看起来无压力,但是肯定中文看起来比较快,记的也牢,所以用中文再写一下。 […]

  38. […] we used a Linux tool called Siege to load test the two APIs, and the results were staggering: on the same EC2 instance size, our […]

  39. Hi there to every one, the contents present at this web
    page are genuinely amazing for people knowledge, well, keep up
    the good work fellows.

    my web site: company of heroes 2 key generator serial code

  40. Batuhan Göksu says:

    During the siege on the latest version of Mac OS X, use the error.

    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer
    [error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer

    • Jeff Fulmer says:

      Generally this happens when you schedule more siege users than your website can handle. Let’s say you’re using apache. If apache is configured to spawn 256 workers and you lay siege with 1000 users, at some point apache will start slamming the phone down on you….

  41. I just sent you a modified version of 3.0.5 which uses milliseconds rather than fractional seconds. Thanks for a great tool.

  42. Alexey says:

    Hi, thanks for your great software!

    Can you advise why I always get the same result when testing my servers on slightly different options like:

    siege -c 500 -i -b -t 1M http://myserver/specificuri
    siege -c 300 -i -b -t 1M http://myserver/specificuri
    siege -c 500 -i -b -t 1M -f /opt/siege.uris
    siege -c 500 -t 1M -f /opt/siege.uris
    siege -c 500 -i -b -t 1M -f /opt/siege.uris -d 10

    It’s always 295 req/s with concurrency almost 500 (or 300). More on that, I can see that my server takes this siege lazily, at about 30-50% of its maximum capabilities.

    For instance, ab -c 500 shows 1200-2000 reqs/s which makes me quite happy but I’m seeking for internet behaviour emulation and other cool features siege should provide…

  43. I’ve found what I consider to be a significant gap in Siege’s coverage. I am glad we have the –get option, but the lack of support for it outside of a single URL as specified on the command line, aka “not supported when using the URLs file” quite limits it’s use in environments which leverage various forms of server side caching. This results in numbers not representative at all of the server’s abilities.

    I’ve tried setting gmethod to GET instead of HEAD but it doesn’t take. According to the comments in the auto-generated config file, gmethod is ONLY considered when -g is specified. Further, according to the Siege manual, a plain URL in the urls.txt file is how to build a GET request. I suspect this condition was missed in the conversion to enable –get and the default when pulling from a urls.txt is the HEAD default, not GET as it used to be.

    A few ways I can see to resolve this are:
    1. Make gmethod apply always
    2. Make gmethod apply when reading from the URLS file
    3. Allow the URLs file to specify GET as a method just as POST is used today.

    As it stands now, I can not point Siege at a urls.txt file and have it issue GET requests (which are cacheable), which means I can not actually simulate in any reasonable way an actual browser session.

    Suspicions as to why are just that, suspicions. I’ve just DL’ed the code and will begin trawling through it looking for what/where.

    • Jeff Fulmer says:

      I’m not completely clear on what you how to achieve but –reps=once in the latest beta may achieve what you’d like. Basically, that divides the file among each simulated user and each URL in the file is hit exactly once. When all the URLs have been requested, the run comes to an end.

      -g/–get is mostly useful for HTTP debugging. I find it much easier than telnetting to the port and issuing requests by hand.

      • Just came back to report this isn’t the issue. Turns out the issue is the default of accepting gzip encoding, which disables caching on the server side. It might be worth throwing a comment into the generated config to that effect. Something like:

        “NOTE: When accepting gzip encoding, default server-side caching will be disabled as compressed content is not by default enabled.”

        should do it

  44. Dnyanesh says:

    Hi,
    Thanks for this nice tool. Can it be used to test the load in the REST API?. Like, to test the performance of an REST API call?

  45. Joseph says:

    This is a really great tool. I just have a little request. I spent half of yesterday trying to find out how to configure siege to use our proxy server.

    I am using the latest stable 3.0.5 version. I saw that the .siegerc template has documentation for the proxy-login setting but no other documentation for configuring a proxy. I eventually found a listing for init.c and found that you look for two other config settings proxy-host and proxy-port. It would be great if you could add documentation for these settings to the .siegerc template so it is easier for people to find how to configure this setting in future.

    • Jeff Fulmer says:

      Wow. Thanks for reaching out. I always thought it was in there. I thought that largely because at the top of the file, I use proxy-host to illustrate how to use variables in the file. Thanks. I’ll get them in the template.

      • Joseph says:

        Hey no problem. Now that I have the proxy configured I have a bigger problem. When the proxy is set http requests work but I get a SegFault when I try with https. Siege works fine with https when a proxy is not configured so I think it is the combination of the two that is causing the error.

        $ siege https://www.google.com
        ** SIEGE 3.0.5
        ** Preparing 15 concurrent users for battle.
        The server is now under siege…
        [1] 5789 segmentation fault siege https://www.google.com

        I can send you the crash dump if that would help.

  46. Ruel says:

    Great tool! And works great on OSX too. Thank you for providing this to the community. Am I correct to assume that siege does not download the graphics files (JPG, PNG, GIF), CSS, and JS files during it’s testing? It only downloads the executed/rendered HTML file?

  47. amit says:

    Installed siege 3.0.6

    and using siege -c 1 -r 10

    i ve entered the proxy details in /usr/local/etc/siegerc file

    but this is giving “Segmentation fault “error

    • Jeff says:

      The fact that it segfaults is a bug. I’ll have too look at that. In the meantime, did you tell it what to hit? You’ll need to add a URL at the command line or fill your urls.txt file with urls.

      • amit says:

        Yes i filled the url.txt with urls like yahoo.com amazon.com

        actually i am getting confused with the instalaion and config process.. do u have any easy installation step?
        can u please mail me that

        i mean the steps about how to install and what changes to make in which file… basic things

  48. MA says:

    > siege 3.0.5

    libtool: link: warning: `-version-info/-version-number’ is ignored for convenience libraries
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .libs/libjoedog.a(snprintf.o) has no symbols
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .libs/libjoedog.a(snprintf.o) has no symbols
    auth.c:477:66: warning: incompatible pointer types passing ‘size_t *’ (aka ‘unsigned long *’) to parameter of type ‘unsigned int *’ [-Wincompatible-pointer-types]
    result->cnonce_value = __get_random_string(DIGEST_CNONCE_SIZE, randseed);
    ^~~~~~~~
    auth.c:447:50: note: passing argument to parameter ‘randseed’ here
    __get_random_string(size_t length, unsigned int *randseed)
    ^
    1 warning generated.
    client.c:405:68: warning: incompatible pointer types passing ‘unsigned int *’ to parameter of type ‘size_t *’ (aka ‘unsigned long *’) [-Wincompatible-pointer-types]
    my.auth, &(client->auth.wchlg), &(client->auth.wcred), &(client->rand_r_SEED),
    ^~~~~~~~~~~~~~~~~~~~~~
    ./auth.h:44:75: note: passing argument to parameter ‘rand’ here
    BOOLEAN auth_set_digest_header(AUTH this, DCHLG **ch, DCRED **cr, size_t *rand, char *realm, char *str);
    ^
    client.c:433:68: warning: incompatible pointer types passing ‘unsigned int *’ to parameter of type ‘size_t *’ (aka ‘unsigned long *’) [-Wincompatible-pointer-types]
    my.auth, &(client->auth.pchlg), &(client->auth.pcred), &(client->rand_r_SEED),
    ^~~~~~~~~~~~~~~~~~~~~~
    ./auth.h:44:75: note: passing argument to parameter ‘rand’ here
    BOOLEAN auth_set_digest_header(AUTH this, DCHLG **ch, DCRED **cr, size_t *rand, char *realm, char *str);
    ^
    2 warnings generated.
    cfg.c:82:26: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(line, 0, sizeof(line));
    ~~~~ ^~~~
    cfg.c:82:26: note: did you mean to provide an explicit length?
    memset(line, 0, sizeof(line));
    ^~~~
    cfg.c:130:28: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(line, 0, sizeof(line));
    ~~~~ ^~~~
    cfg.c:130:28: note: did you mean to provide an explicit length?
    memset(line, 0, sizeof(line));
    ^~~~
    2 warnings generated.
    http://ftp.c:146:11: warning: incompatible pointer to integer conversion initializing ‘size_t’ (aka ‘unsigned long’) with an expression of type ‘pthread_t’ (aka ‘struct _opaque_pthread_t *’) [-Wint-conversion]
    size_t id = pthread_self();
    ^ ~~~~~~~~~~~~~~
    http://ftp.c:159:45: warning: format specifies type ‘unsigned int’ but the argument has type ‘size_t’ (aka ‘unsigned long’) [-Wformat]
    snprintf(file, len, “%s-%u.%s”, parts[0], id, (parts[1]==NULL)?””:parts[1]);
    ~~ ^~
    %zu
    /usr/include/secure/_stdio.h:57:62: note: expanded from macro ‘snprintf’
    __builtin___snprintf_chk (str, len, 0, __darwin_obsz(str), __VA_ARGS__)
    ^
    http://ftp.c:234:7: warning: variable ‘bytes’ is uninitialized when used here [-Wuninitialized]
    bytes += n;
    ^~~~~
    http://ftp.c:221:13: note: initialize the variable ‘bytes’ to silence this warning
    int bytes;
    ^
    = 0
    3 warnings generated.
    hash.c:196:33: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(keys[i], 0, sizeof(keys[i]));
    ~~~~~~~ ^~~~~~~
    hash.c:196:33: note: did you mean to provide an explicit length?
    memset(keys[i], 0, sizeof(keys[i]));
    ^~~~~~~
    hash.c:244:21: warning: argument to ‘sizeof’ in ‘__builtin___memset_chk’ call is the same pointer type ‘HASH’ (aka ‘struct HASH_T *’) as the destination; expected ‘struct HASH_T’ or an explicit length [-Wsizeof-pointer-memaccess]
    memset(this, 0, sizeof(HASH));
    ~~~~ ^~~~~~~~~~~~
    /usr/include/secure/_string.h:77:38: note: expanded from macro ‘memset’
    __builtin___memset_chk (dest, val, len, __darwin_obsz0 (dest))
    ^
    2 warnings generated.
    ssl.c:89:13: warning: assigning to ‘SSL_METHOD *’ (aka ‘struct ssl_method_st *’) from ‘const SSL_METHOD *’ (aka ‘const struct ssl_method_st *’) discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
    C->method = SSLv23_client_method();
    ^ ~~~~~~~~~~~~~~~~~~~~~~
    ssl.c:206:16: warning: comparison of constant 4 with expression of type ‘BOOLEAN’ is always false [-Wtautological-constant-out-of-range-compare]
    if( my.debug == 4 ){
    ~~~~~~~~ ^ ~
    2 warnings generated.
    url.c:142:42: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(this->hostname, 0, sizeof this->hostname);
    ~~~~~~~~~~~~~~ ~~~~~~^~~~~~~~
    url.c:142:42: note: did you mean to provide an explicit length?
    memset(this->hostname, 0, sizeof this->hostname);
    ~~~~~~^~~~~~~~
    url.c:163:38: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(this->etag, 0, sizeof this->etag);
    ~~~~~~~~~~ ~~~~~~^~~~
    url.c:163:38: note: did you mean to provide an explicit length?
    memset(this->etag, 0, sizeof this->etag);
    ~~~~~~^~~~
    url.c:369:25: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(tag, 0, sizeof tag);
    ~~~ ^~~
    url.c:369:25: note: did you mean to provide an explicit length?
    memset(tag, 0, sizeof tag);
    ^~~
    url.c:427:29: warning: format specifies type ‘int’ but the argument has type ‘size_t’ (aka ‘unsigned long’) [-Wformat]
    printf(“Post Len: %d\n”, url_get_postlen(this));
    ~~ ^~~~~~~~~~~~~~~~~~~~~
    %zu
    url.c:536:42: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(this->url, ”, sizeof this->url);
    ~~~~~~~~~ ~~~~~~^~~
    url.c:536:42: note: did you mean to provide an explicit length?
    memset(this->url, ”, sizeof this->url);
    ~~~~~~^~~
    url.c:545:42: warning: ‘memset’ call operates on objects of type ‘char’ while the size is based on a different type ‘char *’ [-Wsizeof-pointer-memaccess]
    memset(this->url, ”, sizeof this->url);
    ~~~~~~~~~ ~~~~~~^~~
    url.c:545:42: note: did you mean to provide an explicit length?
    memset(this->url, ”, sizeof this->url);
    ~~~~~~^~~
    6 warnings generated.

  49. buzznet.com says:

    If you are planning to gget into direct mailing but dont really understand the ins and ours of the
    process – a part that many companies sadly neglect to consider.

    While email blasts with psychiatry shelf a purchased lead list can certainly be a
    waste of yours and their time if they cannot offer this facility.

  50. […] “ab” – benchmark utility is built into Apache. A popular alternative to “ab” which can also test lists of urls – meaning benchmark your whole app – is siege – http://www.joedog.org/siege-home/ […]

  51. Hurrah, that’s what I was exploring for, what a information!
    existing here at this blog, thanks admin of this web site.

  52. […] – ever do load testing or benchmarking? Siege is a pretty powerful , yet lightweight tool. You can use it through the command line and it has […]

  53. […] be using siege to drive load against our test application. For the purposes of these tests, I’ll be […]

  54. […] like siege, even though it definitely falls into the bracket of “esoteric tools I will probably never […]

  55. my baby says:

    Thank you a bunch for sharing this with all people you actually recognize what you are talking approximately!
    Bookmarked. Kindly also visit my site =).

    We may have a link alternate agreement among us

  56. Hi to every body, it’s my first visit of this website; this
    weblog carries amazing and really good information in support of readers.

  57. Collette says:

    This will make the other person feel really good and create some interest in you.
    Where are you going. .

    My site: free sex sites (Collette)

  58. youtube.com says:

    Hurrah, that’s what I was searching for, what a stuff!
    present here at thnis website, thanks admin oof
    this web site.

    my web site you tube mp3 converter – youtube.com,

  59. Do you mind if I quote a couple of your articles as long as I provide credit and sources returning to your blog: . I’m going to aslo be sure to give you the appropriate anchor text hyperlink using your website title: . Please make sure to let me know if this is acceptable with you. Thanks alot :)

  60. My programmer is trying to persuade me to move to .net from PHP.
    I have always disliked the idea because of the costs. But he’s tryiong none
    the less. I’ve been using WordPress on a variety of websites for about a year and am worried about switching to another platform.
    I have heard great things about blogengine.net. Is there a
    way I can import all my wordpress posts into it?

    Any help would be greatly appreciated!

  61. Williams says:

    Toout ϲes pozt sont véritablement captivants

  62. Quel hasard je pensais rédiger un petit poste pareil à celui-là

  63. Anyway we can find the p50 and p90 data with Siege + Sproxy?

  64. dyke says:

    Hi:
    I use siege to test for serval days,then i find that siege seams fall sleep,the process state of siege is “sl+”,and without any error report.is there any suggestion?

    • dyke says:

      state is “Sl+”,and when this happens,still have 3 thread(I start 100 with “siege -c 100 -r 1000000 url”)

  65. Johnson says:

    Hello it’s me, I am also visiting this web site regularly, this website is truly fastidious and the visitors are actually sharing pleasant thoughts.

  66. Great post. I was checking continuously this blog and I am impressed!
    Very helpful information specially the last part :
    ) I care for such info a lot. I was looking for this certain info for
    a very long time. Thank you and good luck.

  67. I used to be recommended this blog by means of my cousin. I am no longer sure whether this post is written by means of him as no one else recognise such specified about my trouble.
    You’re amazing! Thanks!

  68. Jeremy says:

    Hi Jeff

    I’ve discovered a bug in version 3.0.6 – it doesn’t properly support multiple login urls – it only ever uses the first defined login-url in the siegerc config file:

    I’ve updated the source and created a patch here:
    https://gist.github.com/jninnes/4d62f50b7c9a217b0304/revisions

  69. Tito says:

    Hi Jeff,

    I’m not sure I understand how the request time is reported. According to the summary, it took a total of 2.90 secs to run the following siege:

    siege –concurrent=10 –reps=5 –benchmark –internet –delay=1 -f ~/Desktop/urls.txt > ~/Desktop/stress_test.csv

    The summary looks like:

    Transactions: 54 hits
    Availability: 100.00 %
    Elapsed time: 2.90 secs
    Data transferred: 0.83 MB
    Response time: 0.40 secs
    Transaction rate: 18.62 trans/sec
    Throughput: 0.29 MB/sec
    Concurrency: 7.50
    Successful transactions: 54
    Failed transactions: 0
    Longest transaction: 1.40
    Shortest transaction: 0.03

    However, when I add the total number of seconds reported on each of the requests, the total sums 21.74 secs. It looks like the number reported sometimes is way higher than I would expect. Also, when I see the requests pass by in terminal, there is no way it’s taking so long. Depending on how I write the siege command, it tells me that some requests took 20 secs… which cannot be because the request was reported via terminal way faster than that. How are these numbers supposed to be interpreted?

    Thanks!

  70. jsmirov says:

    Hello,

    I am experiencing an issue with vagrant box.
    http://stackoverflow.com/questions/25095492/how-to-siege-domain-on-local-vagrant-box

    I am running a PHP app on vagrant box. in /etc/hosts I put a app host to point on vagrant. I would like to benchmark my app, but problem is that I am always getting dnserrors. Seems like siege can’t read /etc/hosts?

    in /etc/hosts I have host like this:

    local.domain.com vagrantboxip

    and i run
    siege [params] local.domain.com

    and I get dnserror?url=local.domain.com with redirects.

    What would be the solution?

    P.S. I am running osx.

    • Jeff Fulmer says:

      Siege doesn’t read /etc/hosts, your resolver does. The operating system does. If OSX is like other servers, then you have the syntax backwards. It should be IP address followed by name:

      1.1.1.1 local.domain.com

  71. Sohan says:

    Hi,

    I am using siege 2.7.0 on ubuntu machine. I ha hitting few request through siege. Even if i hit wrong url i do not get count of failed trasaction, in logs i can see http 404 error .As per document failed transactions are >400 right?

    Other thing is that i can see default reps property in .siege.rc file.
    repetitions: n/a

    Please help.
    Thanks,
    Sohan

  72. Sohan says:

    Hi,

    After running my test for 5 mins i got following error:

    [alert] socket: -152783104 select timed out: Connection timed out
    done.
    siege aborted due to excessive socket failure; you

    What setting i must do or what should i configure/tune to get rid of this error.
    I am using Ubuntu 12.04.

    Thanks

    • Sohan says:

      Hey,

      My bad. I resolved the issue by setting default time out parm in siege config.
      I made to 60s as per my requirement.

      Cheers,

    • Jeff Fulmer says:

      Ninety-five percent of the time, this error occurs because you’ve configured more simulated users in siege than your web server is configured to handle. If you schedule 500 simulated users and the server is configured to run 256 threads, then guess what happens as requests start queuing.

      • Sohan says:

        MY server is simple http server. Can you tell me what thresol paramter or property is used in siegerc file.

        • Jeff Fulmer says:

          I don’t know what “simple http server” means. If you’re using apache out of the box, I believe it’s configured to use 256 processes (or threads, depending on your model). In that case, you don’t want to use more than 256 simulated siege users. If you schedule more users than your server can handle, you’re just going to make a mess.

          • Sohan says:

            I am using node-js http server. I created http request to hit the server and log the message.
            In that case siege is to fast or create unncessary port connection …. ?

  73. Sohan says:

    Hi,

    Why the transactions number is always different in siege. Its weird getting always different transaction number when i run with same parameters

    • Sohan says:

      Hey,

      My bad. I did not understand ordering matters for commands in siege from command line. I tried changing my order of commands and it worked . I did not find document for ordering of commands.

      Thanks

Leave a Reply




Recent Comments

  • Kate: Nice Post. If you don’t have cron jobs on your server you can always use https://www.easycron.com/
  • Sohan: I am using node-js http server. I created http request to hit the server and log the message. In that case...
  • Jeff Fulmer: I don’t know what “simple http server” means. If you’re using apache out of the...
  • Sohan: MY server is simple http server. Can you tell me what thresol paramter or property is used in siegerc file.
  • Jeff Fulmer: Ninety-five percent of the time, this error occurs because you’ve configured more simulated users...