[Rt-devel] Experimental FastCGI-PM

Matt Knopp mhat at netlag.com
Fri May 14 17:22:17 EDT 2004


Here's the code I mentioned earlier today. You'll need yet another module
from CPAN: 

  FCGI::ProcManager
  http://search.cpan.org/~jurach/FCGI-ProcManager-0.17/

Install, blah blah. 

The supplied patch should give you some general ideas. You will probably 
need to edit the patch some to fit your needs [paths, etc]. 

Also, you will need to add the following to your RT_SiteConfig.pm: 

  Set($FCGIProcesses,         6);

Oh and if you're running in a truly memory starved environment you might
want to look at the last few lines of the request loop; there is a tiny
bit of code there to cause the fcgi processes to exit after a defined 
number of requests. If you chose to turn this on you'll need to also add
the following to your RT_SiteConfig.pm: 

  Set($FCGIRequestCounter,    0);
  Set($FCGIMaxRequests,    1000);

Set FCGIMaxRequests to whatever seems like a reasonable value to you. 
Most this helps work around the tendency for RT processes to get very 
large. 

--
Matt
-------------- next part --------------
--- ../src/rt-3.0.10/bin/mason_handler.fcgi	2004-04-01 20:09:55.000000000 -0600
+++ mason_handler.fcgi-p	2004-05-14 15:58:19.000000000 -0500
@@ -23,9 +23,11 @@
 # 
 # END LICENSE BLOCK
 
+use lib '/opt/coreadm/lib/perl5';
+use lib '/opt/coreadm/lib/perl5/site_perl';
 use strict;
 use File::Basename;
-require ('/opt/vws/webmail1/rt/bin/webmux.pl');
+require ('/opt/webapp/rt/bin/webmux.pl');
 
 my $h = &RT::Interface::Web::NewCGIHandler(@RT::MasonParameters);
 
@@ -34,8 +36,16 @@
 
 RT::Init();
 
+# FCGI Process Manager 
+use FCGI::ProcManager;
+my $procman = new FCGI::ProcManager({ n_processes => RT::FCGIProcesses });
+   $procman->pm_manage(); 
+
 # Response loop
 while ( my $cgi = CGI::Fast->new ) {
+
+    $procman->pm_pre_dispatch(); 
+
     # the whole point of fastcgi requires the env to get reset here..
     # So we must squash it again
     $ENV{'PATH'}   = '/bin:/usr/bin';
@@ -62,6 +72,8 @@
         $RT::Logger->crit("Transaction not committed. Usually indicates a software fault. Data loss may have occurred") ;
     }
 
+    $procman->pm_post_dispatch();
+    #exit(0) if ++$RT::FCGIRequestCounter > $RT::FCGIMaxRequests;
 
 }


More information about the Rt-devel mailing list