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