Home > Linux, Linux 2.6, Testing > Monkey, an Open Source High Performance Embedded Web Server

Monkey, an Open Source High Performance Embedded Web Server

Some time ago, I mentioned 5 web servers (mathopd, thttpd, busybox httpd, boa and lighttpd) suitable for embedded systems (including those featuring no MMU processors) and low end machines.

I’ve recently come across Monkey web server, a lightweight open source Web Server for Linux (2.6.29 or greater), which has been designed with focus in embedded devices. Monkey is currently supported on ARM, x86 and x64, although a quick analysis of the source code shows it forks, so it won’t be supported on processors that do not feature a memory management unit (MMU) without modifications.

Monkey supports the following features:

  • HTTP/1.1 compliant
  • Virtual Hosts
  • Asynchronous networking model (event-driven)
  • Indented configuration
  • Plugins Support
  • C API Interface
  • Other features through base plugins:
    • SSL
    • Security
    • Log writter
    • Directory Listing
    • Shell: Command line

The developers have benchmarked Monkey against busybox httpd and nginx on a now well-know ARMv6 platform: the Raspberry Pi. They used Siege v.2.72 benchmarking tool to perform the tests instead of Apache Benchmark (ab) because the former is said to provide more accurate results because it has a lower latency than ab.

Here are the results between Monkey web server and Busybox httpd.

The left chart shows the number of transactions per second and the right chart shows the shortest and longest transaction times. In this benchmark, they used 10 concurrent users download an HTML file in localhost and Monkey delivers better performance on the metrics shown.

Now, let’s see the results between Monkey 1.1.0 (development version) and nginx.

In this benchmark, they used 100 concurrent users downloading a PNG file in localhost, so the results in this benchmark are not directly comparable to the previous test results for busybox vs monkey. Monkey is also shown to outperform nginx both in terms of requests per second and longest and shortest transaction times.

Monkey can support PHP and Mysql (via extensions), but does not implement PHP-FastCGI yet (this is work in progress), so you won’t be able to use this web server for things like WordPress.

The latest version – Monkey 1.0.1 (codenamed Monkey I/O) – has been released on the 15th of June. The web server is a small source code download (322KB), and can easily be build using the usual configure + make procedure. [Update: Sander commented that you can also install Monkey (version¬†0.9.3) in Debian/Ubuntu with “sudo apt-get install monkey”]

For further details,  documentation and support, you can visit Monkey Project website.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

  1. Haris Sarwar
    June 25th, 2012 at 18:28 | #1

    What about mongoose web server?
    http://code.google.com/p/mongoose/

  2. June 25th, 2012 at 19:40 | #2

    @ Haris Sarwar
    Thanks for the link. I had never heard about this web server either. Its footprint appears to be pretty small (40KB binary for Windows), supports Linux, Windows and MacOS, features a C API and has python and C# bindings. I can also see some instructions to setup Mysql and PHP.

    Btw, Monkey is a 70 Kb binary in Linux after stripping.

  3. Sander
    June 25th, 2012 at 20:14 | #3

    FYI: “monkey” is in the Ubuntu and Debian repository. I just installed Monkey on my Raspi with an easy “sudo apt-get install monkey” …

  4. Sander
  5. June 25th, 2012 at 20:51 | #5

    @ cnxsoft
    …and Mongoose can also run in Android – http://code.google.com/p/mongoose/wiki/BuildOnAndroid

  6. Sander
    June 25th, 2012 at 21:13 | #6

    Hmmm. I couldn’t get monkey working on IPv6, so I’m back on lighttpd, which works on IPv6 out-of-the-box.

  7. June 26th, 2012 at 10:41 | #7

    @ Sander
    They have some instructions for IPv6 (http://monkey-project.com/documentation/ipv6), so it’s supposed to work.
    Maybe the version in Ubuntu/Debian does not support it yet.

  8. July 9th, 2012 at 06:11 | #8

    Hi,

    thanks for the article :)

    The web server will just fork() once if you request to run in background mode. It always use the event-driven socket model.

    regards,

    Eduardo Silva
    monkey-project.com

  9. July 9th, 2012 at 09:41 | #9

    @ Eduardo Silva
    Nice to see the project’s maintainer found my article. :)

    If it uses fork, it won’t be able to run in background mode with no-mmu processors such as Cortex M3/M4 and ARM7TDMI, but since it forks once, the modification should not be too difficult.

  10. August 18th, 2012 at 13:04 | #10

    patches are welcome :)

    We just released v1.2 and we are distributing our own .deb packages:

    http://monkey-project.com/Announcements/v1.1.0
    http://monkey-project.com/documentation/debian_ubuntu

  11. Kelvin
    September 21st, 2012 at 04:37 | #11

    I have an embedded linux app but our linux is 2.6.18.8, will this preclude using monkey or can it be made to build under this version.

    Thanks

  1. No trackbacks yet.