ABYSS – Tiny HTTP/1.1 Web Server For Serving Static Files

ABYSS Web Server

ABYSS is a micro HTTP/1.1 compliant web server written by Moez Mahfoudh.
It was designed in to be fast, portable and consume very low resources.

# create build directory
mkdir -p ~/build/abyss
cd ~/build/abyss

# download and build abyss
wget http://abyss.sourceforge.net/abyss-0.3.tar.gz
tar -xvf abyss-0.3.tar.gz
cd abyss/src
make
cd ..

# Config File: ./conf/abyss.conf
# get current working directory, escape it and save it to a variable
currentpath=$(echo $(pwd)|sed -e "s/\//\\\\\//g");

# uncomment current server root
sed -i 's/^ServerRoot/#ServerRoot/g' ./conf/abyss.conf

# set the current working directory to server root
sed -i "s/^\(#ServerRoot.*$\)/\1\nServerRoot $currentpath/g" ./conf/abyss.conf

# disable access logging - make sense for the test
sed -i 's/^LogFile/#LogFile/g' ./conf/abyss.conf

# start server - normally start on port 8000
cd bin
./abyss -c ../conf/abyss.conf

# check server
wget -qO- http://localhost:8000/

Simple Benchmark with Apache Bench


ab -t60 -c15000 -r  http://localhost:8000/

running time: 60 seconds
concurrency: 15000

Results

 ab -t60 -c15000 -r  http://localhost:8000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Finished 47780 requests


Server Software:        ABYSS/0.3
Server Hostname:        localhost
Server Port:            8000

Document Path:          /
Document Length:        664 bytes

Concurrency Level:      15000
Time taken for tests:   60.295 seconds
Complete requests:      47780
Failed requests:        12342
   (Connect: 0, Receive: 4113, Length: 4116, Exceptions: 4113)
Write errors:           0
Total transferred:      37114400 bytes
HTML transferred:       28992896 bytes
Requests per second:    792.44 [#/sec] (mean)
Time per request:       18928.933 [ms] (mean)
Time per request:       1.262 [ms] (mean, across all concurrent requests)
Transfer rate:          601.12 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0 2326 3658.3   1003   15674
Processing:     1 5473 13235.1    282   57266
Waiting:        0 1618 5131.5    127   40374
Total:          1 7800 14813.4   1161   60274

Percentage of the requests served within a certain time (ms)
  50%   1161
  66%   3035
  75%   6213
  80%   8127
  90%  31038
  95%  47888
  98%  57267
  99%  58207
 100%  60274 (longest request)

Abyss Web Server by aprelium

Aprelium has taken the further development of Abyss.
So I’ll a version from their Server.

# create build directory
mkdir -p ~/build/abyss
cd ~/build/abyss

# download and build abyss
wget http://www.aprelium.com/data/abwsx1.tgz
tar -xvf abwsx1.tgz
cd abyssws
./abyssws-x64

Simple Benchmark with Apache Bench


ab -t60 -c15000 -r  http://localhost:8080/

running time: 60 seconds
concurrency: 15000

Results

ab -t60 -c15000 -r  http://localhost:8080/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests

Test aborted after 10 failures

apr_socket_connect(): Connection reset by peer (104)
Total of 26144 requests completed
a@t400:~$ ab -t60 -c10000 -r  http://localhost:8080/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Abyss/2.8.0.1-X1-Linux
Server Hostname:        localhost
Server Port:            8080

Document Path:          /
Document Length:        1346 bytes

Concurrency Level:      10000
Time taken for tests:   41.712 seconds
Complete requests:      50000
Failed requests:        16029
   (Connect: 0, Receive: 4756, Length: 5693, Exceptions: 5580)
Write errors:           0
Total transferred:      69251841 bytes
HTML transferred:       59637222 bytes
Requests per second:    1198.70 [#/sec] (mean)
Time per request:       8342.376 [ms] (mean)
Time per request:       0.834 [ms] (mean, across all concurrent requests)
Transfer rate:          1621.33 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        4 1324 2259.2    417   15470
Processing:    32 2702 6910.7    426   40446
Waiting:        0  565 1577.4    319   16037
Total:        137 4025 7911.9    866   41590

Percentage of the requests served within a certain time (ms)
  50%    866
  66%   1510
  75%   1842
  80%   3625
  90%  13940
  95%  24139
  98%  33628
  99%  35464
 100%  41590 (longest request)

Server Output

./abyssws-x64
Abyss Web Server X1 (v 2.8)
Copyright (C) Aprelium - 2001-2012

-- Default host on port 8080 is up and running (Local URL http://127.0.0.1:8080)

Console local URL: http://127.0.0.1:8888

Critical: The server died unexpectedly (code=0xFFFFFFFF), it is being restarted automatically.
-- Default host on port 8080 is up and running (Local URL http://127.0.0.1:8080)

Console local URL: http://127.0.0.1:8888

References

1. http://abyss.sourceforge.net/
2. http://abyss.sourceforge.net/install.html
3. http://www.aprelium.com/abyssws/
4. http://www.aprelium.com/abyssws/download.php
5. http://backreference.org/2009/12/09/using-shell-variables-in-sed/


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *