Re: mod_perl interpreter pool

2019-02-24 Thread Gazzali Jaleel




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:

 StartServers 5
 MinSpareServers   5
 MaxSpareServers  10
 MaxRequestWorkers 150
 MaxConnectionsPerChild   0


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:*/
/j...@lariat.co /
/
*Customer Service:*/
877.268.6667
supp...@lariat.co 





Re: mod_perl interpreter pool

2019-02-24 Thread tomcat

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:

 StartServers 5
 MinSpareServers   5
 MaxSpareServers  10
 MaxRequestWorkers 150
 MaxConnectionsPerChild   0


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.

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:*/
/j...@lariat.co /
/
*Customer Service:*/
877.268.6667
supp...@lariat.co 




Re: mod_perl interpreter pool

2019-02-23 Thread Gazzali Jaleel



On 2/22/2019 2:15 PM, John Dunlap wrote:

The Prefork MPM has the following settings:

     StartServers 5
     MinSpareServers   5
     MaxSpareServers  10
     MaxRequestWorkers 150
     MaxConnectionsPerChild   0


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 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:*/
/j...@lariat.co /
/
*Customer Service:*/
877.268.6667
supp...@lariat.co