Computer
Computer Diary
    RepRap


    "Yes, we can."

    Barack Obama
    4th November 2008, Chicago, USA

    Here my little rant and praise place, where the daily experiences of my programming work are expressed. I publish them with the idea that others might find it useful and benefit from it.

    Tag <CGI>

    Check also other posts with other tags.

    2009/04/15
    Rebirth of FastCGI
    last edited 2009/04/16 08:57 (*)

    Since I switched from Apache.org to Lighttpd.net , as mentioned in How To Save 300MB RAM, I got to an old buddy I almost forgot: FastCGI.

    CGI

    use CGI;
    

    parse_arguments(); do_request(); exit();

    FCGI

    use FCGI;
    

    while(get_request()) { parse_arguments(); do_request(); } exit(); # probably never reached

    It's an internal (tcp or named socket) based sub-server process which handles the requests. Why should this be anything better than Apache with mod_php or mod_perl?

    Here some numbers, Intel P4 2.4GHz with linux-2.6.27-7-generic, running lighttpd/1.4.19:

    • perl-cgi: 18 requests/s or 55ms / request
    • perl-fcgi (via named socket): 240 requests/s or 4.1ms / request

    which makes about 13x speedup! It can be explained that the fcgi perl is already started and immediately handles the request - whereas a pure cgi has to load perl and then the cgi code as well.

    In order to use fcgi with lighttpd see at ModFastCGI , be sure you don't use the lighty-enable-mod as it only works for php, enable it by hand in your lighttpd.conf:

    • add "mod_fastcgi" into server.modules = ()
    • add fastcgi.server definition within your server definition

    Sidenote

    I coded a fcgi test so after 100 or 1000 requests the while() loop would be exited - but it caused a few "500 internal error" at the client end: 1 error in 10,000-20,000 requests. In other words, to quit a fcgi causes internal errors within lighttpd for a busy web-site (@ 200 requests/s). Just a few errors you might say, but if you run something important I recommend you rather give /etc/init.d/lighttpd restart instead quitting the fcgi itself. Why? I do like to reset the fcgi because nobody is perfect, and perl might have or my fcgi code have memory leaks, and if you let it run for days and millions of requests the smallest memory leak will show up - that's why I personally prefer to reset a fcgi once a day.

    See also FastCGI.com



    Check also other posts with other tags.


    [ post new entry ] (only for administators)

    Title:

    Text:

    Tags: (separated by commas)

    Date (optional):

    Password:
     


    .:.




    Copyright 2007-2016, 2020-2024 © by René K. Müller <spiritdude@gmail.com>
    Illustrations and graphics made with Inkscape, GIMP and Tgif