So, I just recently installed the very latest release of SizeLimit, and
this is still a problem. SizeLimit **definitely** returns the wrong
unshared size for processes on any modern Linux system.

        -Max

On 02/03/2010 12:05 PM, Max Kanat-Alexander wrote:
> On 02/03/2010 04:57 AM, Torsten Förtsch wrote:
>> Well, I tend to disagree. (Fred, Adam please read on.)
> 
>       Okay. Have you looked at the actual output of test.cgi?
> 
>       Here's an example of these values just on my local machine, for my bash
> interpreter:
> 
> [mkanat@es-compy ~]$ cat /proc/self/statm
> 21045 125 107 13 0 65 0
> [mkanat@es-compy ~]$ cat /proc/self/status | grep Vm
> VmPeak:          84180 kB
> VmSize:          84180 kB
> VmLck:               0 kB
> VmHWM:             496 kB
> VmRSS:             496 kB
> VmData:            176 kB
> VmStk:              84 kB
> VmExe:              52 kB
> VmLib:            1548 kB
> VmPTE:              48 kB
> 
>       Would you consider that bash is taking up 84MB, or would you consider
> it's taking up 496KB? I have 2GB in physical RAM and 2GB in swap. So,
> theoretically, I should only be able to open 48 terminals before I OOM.
> With 60 terminals open, here's the result of "free":
> 
>              total       used       free
> Mem:          1990       1855        134
> -/+ buffers/cache:       1140        850
> Swap:         1999        212       1787
> 
>       If I were simply to add up the "Virt" column of the top 15 processes in
> "top" on my machine, I'd be using somewhere in the vicinity of 20GB of RAM.
> 
>> So, either the far older statm technique is also wrong or the patch is wrong.
> 
>       I would suspect that if you're using column 0 as the size, then statm
> is also indeed wrong.
> 
>> =item * Apache2::SizeLimit->set_max_process_size($size)
>>
>> This sets the maximum size of the process, including both shared and
>> unshared memory.
> 
>       Ahh, but look at the output of both the "shared" and "private"
> accessors, and they do not add up to VmSize. They add up to RSS.
> 
>> Perhaps Apache2::SizeLimit::Core should read:
>>
>> sub _check_size {
>>     my $class = shift;
>>
>>     my ($size, $share, $unshared) = $class->_platform_check_size();
>>
>>     return ($size, $share, defined $unshared ? $unshared : $size - $share);
> 
>       That would certainly help (because then you would get a more accurate
> count of the current private RSS), although I'd argue that VmSize is
> still meaningless. I can imagine few instances where you'd want to know
> the total size of the address space of a process, even if most of it had
> never been mapped to an actual memory page.
> 
>       -Max


-- 
http://www.bugzillasource.com/
Competent, Friendly Bugzilla, Perl, and IT Services

Reply via email to