perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gazzali Jaleel <bac2...@bac2bac.com>
Subject Re: mod_perl interpreter pool
Date Mon, 25 Feb 2019 02:19:38 GMT


On 2/24/2019 1:32 PM, André Warnier (tomcat) wrote:
> On 24.02.2019 01:50, Gazzali Jaleel wrote:
>>
>> On 2/22/2019 2:15 PM, John Dunlap wrote:
>>> The Prefork MPM has the following settings:
>>> <IfModule mpm_prefork_module>
>>>          StartServers                     5
>>>          MinSpareServers           5
>>>          MaxSpareServers          10
>>>          MaxRequestWorkers         150
>>>          MaxConnectionsPerChild   0
>>> </IfModule>
>>>
>>> I see these Apache directives but the documentation states that they 
>>> only apply to a
>>> threaded mod_perl/Apache which prefork definitely is not:
>>> PerlInterpStart
>>> PerlInterpMax
>>> PerlInterpMinSpare
>>> PerlInterpMaxSpare
>>> PerlInterpMaxRequests
>>>
>>> How does mod_perl allocate interpreters to the prefork worker 
>>> processes? Is there one
>>> perl interpreter for each of preform worker? Is there a pool of perl 
>>> interpreters which
>>> is smaller than the pool of prefork workers? Are there settings for 
>>> configuring the size
>>> of the perl interpreter pool? When a request comes in, does the user 
>>> have to wait for a
>>> perl interpreter process to start or is there already one waiting for 
>>> them?
>>
>> If you're asking about mod_perl and prefork:
>>
>> Apache handles child process creation. Each Apache child process loads 
>> the Perl
>> interpreter when it starts
> 
> Actually, I believe that since this is "prefork", it is the main Apache 
> process (which already contains a perl interpreter) which gets "forked" 
> (in other words duplicated, as it is) to create a child.  So there is 
> not really a perl interpreter "being started" here (at least not in the 
> sense of "being loaded" etc), it is already loaded and it is part of 
> what is being duplicated.
> (For a more detailed and precise explanation and example, see : 
> http://perl.apache.org/docs/2.0/user/handlers/server.html)
> Correct me if I'm wrong.

That's right, thanks for catching it. Should've said child processes 
will already have the Perl interpreter loaded.

> 
> I have no qualms with the rest below, sounds correct to me.
> 
>   and the Perl interpreter persists in the process till the
>> process terminates. So, at any given time, there're as many Perl 
>> interpreters loaded and
>> ready as there're Apache processes. When a request comes in, if 
>> there's an available
>> Apache process to serve the request, it's served. If not, Apache will 
>> create a new process
>> or queue the request to be served when a process becomes available.
>>
>> With the numbers above, your server is able to handle 150 simultaneous 
>> requests. If
>> processes are not busy serving requests, then Apache will kill idle 
>> processes based on
>> (Min|Max)SpareServers of 5,10. For an overly simple example, if you 
>> get 150 requests at
>> 8:30 am,  the server could create 145 processes to meet demand. 
>> However, if not busy at
>> 8:31 am, when everyone has stepped away for coffee, your process count 
>> could be down near
>> 10. When the boss comes in at 10am and it's back to work, the server 
>> will create 140 new
>> ... at 10:01am, it's down to 10 again.
>>
>> Generally, with mod_perl, you don't want Apache to kill idle processes 
>> but want them to be
>> around, ready to handle new requests. For maximum performance,  
>> (Min|Max)SpareServers
>> could be as high as your MaxRequestWorkers. Of course, all of this 
>> depends on your RAM,
>> CPU utilization etc. and you should be able to find a happy medium as 
>> you tweak the numbers.
>>
>>>
>>> -- 
>>> John Dunlap
>>> /CTO | Lariat/
>>> /
>>> /
>>> /*Direct:*/
>>> /john@lariat.co <mailto:john@lariat.co>/
>>> /
>>> *Customer Service:*/
>>> 877.268.6667
>>> support@lariat.co <mailto:support@lariat.co>
> 
> 

Mime
View raw message