See https://sunstarsys.com/essays/perl7-sealed-lexicals. For the full effect, you will need to build B::Generate with this patched version instead: https://github.com/SunStarSys/cms/blob/master/Generate.xs
Sample mod_perl config + benchmarks:
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 100
MaxSpareThreads 500
ThreadLimit 1000
ThreadsPerChild 100
MaxRequestWorkers 1000000
MaxConnectionsPerChild 0
</IfModule>
<IfModule mod_perl.c>
PerlSwitches -T -I/home/joesuf4/src/cms/lib
PerlInterpStart 2
PerlInterpMax 4
PerlInterpMinSpare 1
PerlInterpMaxSpare 4
PerlInterpMaxRequests 1000000
PerlOptions +GlobalRequest
<Directory /home/joesuf4/src/cms>
Require all granted
AddHandler perl-script .pl
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
</Directory>
<Directory /home/joesuf4/src/trunk/content>
Require all granted
</Directory>
<VirtualHost *:80>
ServerName localhost
DocumentRoot /home/joesuf4/src/trunk/content
Alias /perl-script /home/joesuf4/src/cms
</VirtualHost>
</IfModule>
ab -n 10000 -c 1000 http://localhost/perl-script/enquiry.pl
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.52
Server Hostname: localhost
Server Port: 80
Document Path: /perl-script/enquiry.pl
Document Length: 1329 bytes
Concurrency Level: 1000
Time taken for tests: 1.218 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 15010000 bytes
HTML transferred: 13290000 bytes
Requests per second: 8207.94 [#/sec] (mean)
Time per request: 121.833 [ms] (mean)
Time per request: 0.122 [ms] (mean, across all concurrent requests)
Transfer rate: 12031.37 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 6.2 0 24
Processing: 4 93 49.6 82 458
Waiting: 1 80 44.5 71 455
Total: 17 95 49.5 84 458
Percentage of the requests served within a certain time (ms)
50% 84
66% 100
75% 112
80% 120
90% 147
95% 173
98% 233
99% 318
100% 458 (longest request)
% pgrep -f apache2 | xargs -n1 ps -uwww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 442827 0.0 0.1 18180 14244 ? Ss 11:27 0:00 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 446387 1.7 1.5 7549352 129692 ? Sl 11:28 0:12 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451006 15.2 1.5 7483708 128468 ? Sl 11:39 0:10 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451317 11.7 1.4 7483772 119836 ? Sl 11:39 0:07 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451629 6.4 1.3 7483804 113012 ? Sl 11:39 0:03 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451929 1.1 1.4 7483816 116668 ? Sl 11:39 0:00 /usr/sbin/apache2 -k start
Sample mod_perl config + benchmarks:
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 100
MaxSpareThreads 500
ThreadLimit 1000
ThreadsPerChild 100
MaxRequestWorkers 1000000
MaxConnectionsPerChild 0
</IfModule>
<IfModule mod_perl.c>
PerlSwitches -T -I/home/joesuf4/src/cms/lib
PerlInterpStart 2
PerlInterpMax 4
PerlInterpMinSpare 1
PerlInterpMaxSpare 4
PerlInterpMaxRequests 1000000
PerlOptions +GlobalRequest
<Directory /home/joesuf4/src/cms>
Require all granted
AddHandler perl-script .pl
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
</Directory>
<Directory /home/joesuf4/src/trunk/content>
Require all granted
</Directory>
<VirtualHost *:80>
ServerName localhost
DocumentRoot /home/joesuf4/src/trunk/content
Alias /perl-script /home/joesuf4/src/cms
</VirtualHost>
</IfModule>
ab -n 10000 -c 1000 http://localhost/perl-script/enquiry.pl
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.52
Server Hostname: localhost
Server Port: 80
Document Path: /perl-script/enquiry.pl
Document Length: 1329 bytes
Concurrency Level: 1000
Time taken for tests: 1.218 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 15010000 bytes
HTML transferred: 13290000 bytes
Requests per second: 8207.94 [#/sec] (mean)
Time per request: 121.833 [ms] (mean)
Time per request: 0.122 [ms] (mean, across all concurrent requests)
Transfer rate: 12031.37 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 6.2 0 24
Processing: 4 93 49.6 82 458
Waiting: 1 80 44.5 71 455
Total: 17 95 49.5 84 458
Percentage of the requests served within a certain time (ms)
50% 84
66% 100
75% 112
80% 120
90% 147
95% 173
98% 233
99% 318
100% 458 (longest request)
% pgrep -f apache2 | xargs -n1 ps -uwww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 442827 0.0 0.1 18180 14244 ? Ss 11:27 0:00 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 446387 1.7 1.5 7549352 129692 ? Sl 11:28 0:12 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451006 15.2 1.5 7483708 128468 ? Sl 11:39 0:10 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451317 11.7 1.4 7483772 119836 ? Sl 11:39 0:07 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451629 6.4 1.3 7483804 113012 ? Sl 11:39 0:03 /usr/sbin/apache2 -k start
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 451929 1.1 1.4 7483816 116668 ? Sl 11:39 0:00 /usr/sbin/apache2 -k start