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>