What I'm saying is that this isn't foolproof, but really neither is doing mod_perl + ithreads without sealed.pm. A bad tune will blow up under pressure, so be careful out there in the brave new world of single-tiered webstacks using mod_perl and mpm_event plus mod_http2.
On Wed, Aug 31, 2022 at 8:11 PM Joe Schaefer <j...@sunstarsys.com> wrote: > 4.0.1 is going to trap everything bizarre that occurs within the tweak() > subroutine, and gracefully bail out. > The only thing this needs your help with is to avoid putting heavy ithread > pressure on mod_perl during interpreter > destruction. One simple approach is to make sure your modperl interpreter > settings never destroy ithreads- > leave that for httpd during graceful restart. > > > On Wed, Aug 31, 2022 at 7:41 PM Joe Schaefer <j...@sunstarsys.com> wrote: > >> To throw mod_apreq2 into the benchmarking mix, add items to the query >> string you are hitting (on enquiry.pl). >> In particular, lang=.{en,es,de,fr} will generate UTF-8 European-language >> localized output. >> >> On Wed, Aug 31, 2022 at 7:13 PM Joe Schaefer <j...@sunstarsys.com> wrote: >> >>> I went ahead and copied my company templates over to the github cms >>> repo, so you can run enquiry.pl yourself >>> (once you edit the @TEMPLATE_DIRS path to point at your checkout). You >>> will see sealed.pm at work in the >>> httpd error logs. >>> >>> On Wed, Aug 31, 2022 at 1:02 PM Joe Schaefer <j...@sunstarsys.com> wrote: >>> >>>> For my part in this story, v4.0.0 is the end of the line. This release >>>> solves every business problem my own company >>>> had with prior releases, so I'm satisfied with where it lies. >>>> >>>> But it is not perfect by any stretch. To take it to the level where it >>>> needs to be someday, B::Generate's maintainers need to be reliable >>>> partners with the future maintainers of sealed.pm, to deal with >>>> whatever long-range support issues crop up as perlguts invariably >>>> undergoes changes that break the undocumented assumptions I've made in >>>> getting this into workable condition. >>>> >>>> What do you think about the idea of putting sealed.pm into the modperl >>>> project, vs. a stand-alone on CPAN? >>>> >>>> On Wed, Aug 31, 2022 at 10:53 AM Joe Schaefer <j...@sunstarsys.com> >>>> wrote: >>>> >>>>> In the end, the surgery we do (to method_named), is to replace the >>>>> prior $op's next() pointer to point at the $gv op we copied from >>>>> a known subroutine's op-tree (that uses a typical subroutine call >>>>> instead of a method lookup). Since we relocated that next() pointer, >>>>> we need to decrement the internal refcnt for the method_named op to >>>>> avoid leaks/segfaults during garbage collection of the ithread. >>>>> >>>>> None of the many issues Doug faced back in 2000 to do this on a more >>>>> generic level actually need to be done for this implementation. >>>>> You just need to know that any code that tries to walk this tree (eg >>>>> B::Deparse) post-tweaks may choke on the zombie method_named >>>>> op lying around in one of the sibling() linked lists. That probably >>>>> includes the ithread-cloniing mechanism itself, so only use :sealed >>>>> post ithread construction, not prior to it. >>>>> >>>>> On Wed, Aug 31, 2022 at 10:27 AM Joe Schaefer <j...@sunstarsys.com> >>>>> wrote: >>>>> >>>>>> The :sealed attribute is a statement about a class's @ISA: you are >>>>>> saying you are using its compile-time setting. >>>>>> And because we invoke $class->can to do the lookup, module authors >>>>>> who override UNIVERSAL::can() with a customized >>>>>> one can support AUTOLOADed methods themselves. >>>>>> >>>>>> Under :sealed, you control which lexical object references you want >>>>>> to use compile-time method lookups (via can()), >>>>>> by declaring them with a class (type), or avoiding doing that in the >>>>>> lexical's declaration. It only impacts your subroutine >>>>>> definitions that declare :sealed and a typed lexicals, not any other >>>>>> module's code elsewhere. >>>>>> >>>>>> You absolutely *can* use sealed.pm outside mod_perl, but you need to >>>>>> be wary about using typed lexicals on your method >>>>>> argument stack, because end-users may pass properly derived objects >>>>>> to your method, and will expect your module to use >>>>>> the derived-class's overrides of any method calls in your codebase. >>>>>> Basically the law of the land is that consumers of an API >>>>>> expect all method calls to operate the way *virtual* method calls >>>>>> work in Java/C++. However, what you do internally with API's >>>>>> outside of your published API's argument stack is fair game for >>>>>> :sealed. My advice that it's only practical to seal XS method calls >>>>>> remains. >>>>>> >>>>>> On Wed, Aug 31, 2022 at 9:52 AM Joe Schaefer <j...@sunstarsys.com> >>>>>> wrote: >>>>>> >>>>>>> Submitted a Pull Request for the Generate.xs patch: >>>>>>> https://github.com/rurban/b-generate/pull/2 >>>>>>> Added more comments to sealed.pm to explain the rationale behind >>>>>>> the # replace $methop logic, >>>>>>> since it differs from what Doug did back in 2000. >>>>>>> >>>>>>> On Tue, Aug 30, 2022 at 2:52 PM Joe Schaefer <j...@sunstarsys.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Take a walk down history lane with me here: >>>>>>>> https://www.perl.com/pub/2000/06/dougpatch.html/ >>>>>>>> >>>>>>>> Like ithreads, the idea was sparked from Gurusamy's genius, coded >>>>>>>> up by Doug, and largely forgotten by p5p politics. >>>>>>>> It's not that it couldn't be done, they arrived at the place where >>>>>>>> it *shouldn't* be done, which was deflating for mod_perl fans. >>>>>>>> Simon Couzens made a lot of inroads since, with modularized Perl >>>>>>>> compilers and B::Generate, but it wasn't until >>>>>>>> Perl7 that I was motivated to try any way forward, on a more >>>>>>>> limited, controllable scale. >>>>>>>> >>>>>>>> What do you think? How should this piece of the mod_perl puzzle >>>>>>>> fit in to the CPAN universe? >>>>>>>> >>>>>>>> On Tue, Aug 30, 2022 at 2:12 PM Joe Schaefer <j...@sunstarsys.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Every method call that's implemented in XS is looked-up at >>>>>>>>> compile-time in that script, even for class methods. >>>>>>>>> That's the sweet spot for :sealed. The only other things I do >>>>>>>>> with it are a few hot methods in Dotiac::DTL::Core, but that's >>>>>>>>> probably not >>>>>>>>> worth the bother. >>>>>>>>> >>>>>>>>> On Tue, Aug 30, 2022 at 1:14 PM Joe Schaefer <j...@sunstarsys.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Just look through my commit history on this sample Registry >>>>>>>>>> script to see what's involved in getting sealed activated on your >>>>>>>>>> scripts. >>>>>>>>>> >>>>>>>>>> https://github.com/SunStarSys/cms/blob/master/enquiry.pl >>>>>>>>>> >>>>>>>>>> On Tue, Aug 30, 2022 at 1:12 PM Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> It'd be pretty harmless to apply the RegistryCooker.pm patch >>>>>>>>>>> once we find a home for sealed.pm (either in this project or as >>>>>>>>>>> a stand-alone pragma on CPAN). >>>>>>>>>>> Nothing will segfault without consciously using types on your >>>>>>>>>>> lexical object reference declarations; otherwise it's a giant noop. >>>>>>>>>>> >>>>>>>>>>> On Tue, Aug 30, 2022 at 12:53 PM Joe Schaefer < >>>>>>>>>>> j...@sunstarsys.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> If you really beat the hell out of it thread-wise, sealed.pm >>>>>>>>>>>> v4.0.0 will still segfault, but there's not much more I can do >>>>>>>>>>>> with the >>>>>>>>>>>> code at this point to prevent that. >>>>>>>>>>>> B::Generate doesn't really support what I'm doing here, which >>>>>>>>>>>> is to do surgery on an existing op-tree, instead of just playing >>>>>>>>>>>> around >>>>>>>>>>>> with a user-generated one. >>>>>>>>>>>> There's no good way to remove the target "method_named" op that >>>>>>>>>>>> we're replacing with a gv_op. If that can't be supported using >>>>>>>>>>>> B::OP APIs, >>>>>>>>>>>> then it should >>>>>>>>>>>> be handled from perl itself. The problem is that the politics >>>>>>>>>>>> around the feature were never resolved, because nobody wants to >>>>>>>>>>>> change the >>>>>>>>>>>> default "virtual method" >>>>>>>>>>>> behavior of Perl's OO-runtime-lookups. Now with the new >>>>>>>>>>>> :sealed SUBROUTINE ATTRIBUTE, it's only enabled for people (like >>>>>>>>>>>> us) who >>>>>>>>>>>> want it conditionally applied, >>>>>>>>>>>> just like we do for the :method attribute. >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Aug 30, 2022 at 11:26 AM Joe Schaefer < >>>>>>>>>>>> j...@sunstarsys.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Someday this patch might be interesting: >>>>>>>>>>>>> >>>>>>>>>>>>> diff -u RegistryCooker.pm~ RegistryCooker.pm >>>>>>>>>>>>> --- RegistryCooker.pm~ 2022-08-30 11:10:19.790171019 -0400 >>>>>>>>>>>>> +++ RegistryCooker.pm 2022-08-30 11:12:34.319572045 -0400 >>>>>>>>>>>>> @@ -399,7 +399,8 @@ >>>>>>>>>>>>> my $eval = join '', >>>>>>>>>>>>> 'package ', >>>>>>>>>>>>> $self->{PACKAGE}, ";", >>>>>>>>>>>>> - "sub handler {", >>>>>>>>>>>>> + "use base 'sealed';", >>>>>>>>>>>>> + "sub handler :Sealed {", >>>>>>>>>>>>> "local \$0 = '$script_name';", >>>>>>>>>>>>> $nph, >>>>>>>>>>>>> $shebang, >>>>>>>>>>>>> >>>>>>>>>>>>> On Mon, Aug 29, 2022 at 2:21 PM Joe Schaefer < >>>>>>>>>>>>> j...@sunstarsys.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Forgive me for the pent up frustration of having our >>>>>>>>>>>>>> wonderful mod_perl project being completely ignored and >>>>>>>>>>>>>> abandoned by the >>>>>>>>>>>>>> Perl Steering Committee's frivolous lingustic interests over the >>>>>>>>>>>>>> years >>>>>>>>>>>>>> since the Parrot announcement. >>>>>>>>>>>>>> SaywerX gave us a reason to be hopeful again. Let's see what >>>>>>>>>>>>>> they do with it. >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Mon, Aug 29, 2022 at 1:34 PM Joe Schaefer < >>>>>>>>>>>>>> j...@sunstarsys.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> If the Perl steering committee had any brains left it would >>>>>>>>>>>>>>> have capitalized on the perl 5.34 release and Co announced >>>>>>>>>>>>>>> modperl2 ithread >>>>>>>>>>>>>>> compatibility now available with Perl7’s new release. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Instead they are going to kick the tires on the defaults for >>>>>>>>>>>>>>> strictures and warnings until nobody cares any more. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Monday, August 29, 2022 1:17:17 PM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The only reason I’ve been vacillating about glibc/malloc >>>>>>>>>>>>>>> thread safety is because I couldn’t fathom the fact that people >>>>>>>>>>>>>>> still >>>>>>>>>>>>>>> believed modperl isn’t compatible with mpm_event at this point >>>>>>>>>>>>>>> in the Perl7 >>>>>>>>>>>>>>> storyline. The old segfaults of the past that happened in >>>>>>>>>>>>>>> glibc malloc >>>>>>>>>>>>>>> were because Perl was corrupting the heap in some other part of >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> codebase, and there’s no simple way to track it down without a >>>>>>>>>>>>>>> tool like >>>>>>>>>>>>>>> Valgrind, but we weren’t successful with that effort either. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Monday, August 29, 2022 1:08:00 PM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Religiously avoid setting up per request ithread environment >>>>>>>>>>>>>>> variables. Just use PerlSetEnv in your Webserver config. >>>>>>>>>>>>>>> Everything we did >>>>>>>>>>>>>>> in modperl to support CGI scripts is a train wreck. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Monday, August 29, 2022 1:04:03 PM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Look into reducing the scope of your interpreters down from >>>>>>>>>>>>>>> the request level to the handler level. If all you are doing >>>>>>>>>>>>>>> is running >>>>>>>>>>>>>>> registry scripts, you will get even better scaling out of just >>>>>>>>>>>>>>> a few >>>>>>>>>>>>>>> ithreads per worker process. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Monday, August 29, 2022 12:57:14 PM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The only impact to your work with modperl is that you will >>>>>>>>>>>>>>> need to assess the ithread-safety of your dependent XS-based >>>>>>>>>>>>>>> modules. For >>>>>>>>>>>>>>> example, use a JSON::XS thread safe alternative- there are >>>>>>>>>>>>>>> several. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Monday, August 29, 2022 12:49:22 PM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> There is a mountain of awful advice floating around about >>>>>>>>>>>>>>> ithreads, including pretty much everything going on in Raku >>>>>>>>>>>>>>> around adopting >>>>>>>>>>>>>>> the node.js model instead. It is safe to ignore all that now >>>>>>>>>>>>>>> that SawyerX >>>>>>>>>>>>>>> spit polished all of the perl5 internals. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Monday, August 29, 2022 12:40:43 PM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Many of the performance hacks we’ve encouraged over the >>>>>>>>>>>>>>> years, eg around HTTPD’s lingering close effect, are obsoleted >>>>>>>>>>>>>>> with >>>>>>>>>>>>>>> ithreads. Unless you send flush buckets down the output filter >>>>>>>>>>>>>>> stack >>>>>>>>>>>>>>> yourself, the “response handler” phase exits long before the >>>>>>>>>>>>>>> “connection >>>>>>>>>>>>>>> handler” starts making non blocking socket system calls. So >>>>>>>>>>>>>>> you need an >>>>>>>>>>>>>>> order of magnitude fewer ithreads than you do prefork children >>>>>>>>>>>>>>> in a >>>>>>>>>>>>>>> multitier arch. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>>>>>>>>>>>>> ------------------------------ >>>>>>>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>>>>>>>>>>>>> *Sent:* Sunday, August 28, 2022 11:09:14 AM >>>>>>>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org> >>>>>>>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Benchmark ran on my 2021 Dell Precision Laptop w/ 8 cores + >>>>>>>>>>>>>>> HT (so 16vCPU) and Ubuntu 22.04 inside WSL2. Never topped 50% >>>>>>>>>>>>>>> avg CPU, and >>>>>>>>>>>>>>> almost all of the CPU was in userland (not system calls). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Sat, Aug 27, 2022 at 11:42 AM <j...@sunstarsys.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 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 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>>>>>>>> We only build what you need built. >>>>>>>>>>>>>>> <j...@sunstarsys.com> >>>>>>>>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>>>>>>> We only build what you need built. >>>>>>>>>>>>>> <j...@sunstarsys.com> >>>>>>>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>>>>>> We only build what you need built. >>>>>>>>>>>>> <j...@sunstarsys.com> >>>>>>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>>>>> We only build what you need built. >>>>>>>>>>>> <j...@sunstarsys.com> >>>>>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>>>> We only build what you need built. >>>>>>>>>>> <j...@sunstarsys.com> >>>>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>>> We only build what you need built. >>>>>>>>>> <j...@sunstarsys.com> >>>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Joe Schaefer, Ph.D. >>>>>>>>> We only build what you need built. >>>>>>>>> <j...@sunstarsys.com> >>>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Joe Schaefer, Ph.D. >>>>>>>> We only build what you need built. >>>>>>>> <j...@sunstarsys.com> >>>>>>>> 954.253.3732 <//954.253.3732> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Joe Schaefer, Ph.D. >>>>>>> We only build what you need built. >>>>>>> <j...@sunstarsys.com> >>>>>>> 954.253.3732 <//954.253.3732> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> Joe Schaefer, Ph.D. >>>>>> We only build what you need built. >>>>>> <j...@sunstarsys.com> >>>>>> 954.253.3732 <//954.253.3732> >>>>>> >>>>>> >>>>>> >>>>> >>>>> -- >>>>> Joe Schaefer, Ph.D. >>>>> We only build what you need built. >>>>> <j...@sunstarsys.com> >>>>> 954.253.3732 <//954.253.3732> >>>>> >>>>> >>>>> >>>> >>>> -- >>>> Joe Schaefer, Ph.D. >>>> We only build what you need built. >>>> <j...@sunstarsys.com> >>>> 954.253.3732 <//954.253.3732> >>>> >>>> >>>> >>> >>> -- >>> Joe Schaefer, Ph.D. >>> We only build what you need built. >>> <j...@sunstarsys.com> >>> 954.253.3732 <//954.253.3732> >>> >>> >>> >> >> -- >> Joe Schaefer, Ph.D. >> We only build what you need built. >> <j...@sunstarsys.com> >> 954.253.3732 <//954.253.3732> >> >> >> > > -- > Joe Schaefer, Ph.D. > We only build what you need built. > <j...@sunstarsys.com> > 954.253.3732 <//954.253.3732> > > > -- Joe Schaefer, Ph.D. We only build what you need built. <j...@sunstarsys.com> 954.253.3732 <//954.253.3732>