[mythtv] [mythtv-commits] Ticket #3317: mythbackend memory leak
Michael T. Dean
mtdean at thirdcontact.com
Mon May 7 17:00:30 UTC 2007
On 05/07/2007 12:50 PM, Rob Smith wrote:
> On 5/7/07, Carl Fongheiser <carlfongheiser at gmail.com> wrote:
>
>> On 5/7/07, Kevin Kuphal <kuphal at dls.net> wrote:
>>
>>> Mem: 775856k total, 767484k used, 8372k free, 108k buffers
>>> Swap: 524280k total, 240864k used, 283416k free, 175920k cached
>>>
>>> with the backend process
>>>
>>> 31439 root 18 0 987m 499m 12m S 3.3 65.9 45:08.63 mythbackend
>>>
>> Your machine is seriously short on swap space. A good rule of thumb is to
>> allocate about 2x the amount of physical RAM for swap space. As to why
>> you're getting a fork() error, fork() will attempt to clone the entire
>> address space. In this case, that's 987MB worth. Not all of that will need
>> to be backed by swap, but most of it will. Since you've only got 280 MB
>> free, the fork() fails.
> That's not quite true. Sure, the process will 'take' 987mb worth, but
> a large chunk of that is in shared libs and the like, so it won't take
> all that in swap *or* main memory.
>
> pmap -d `pidof mythbackend` will tell you how much is truely used and
> required, under the writable/private line. on mine it had mapped
> 160640k, and writable/private of 114768k, which means it's 'total'
> footprint is a tad over 270m, but it is only using 115m by itself and
> that's all it needs to page into swap.
>
> If you really want to see where the memory is being used, just look
> above the last line and it will tell you what it is using where.
>
Not to mention, from man 2 fork:
Under Linux, fork() is implemented using copy-on-write pages, so the
only penalty that it incurs is the time and memory required to dupli-
cate the parent's page tables, and to create a unique task structure
for the child.
But, if fork were to clone the actual memory contents, it would be a
complete waste to clone more than the writable/private data.
> That being said, 2x ram for swap is a huge waste.
I agree. Swap size = 2x RAM /was/ the rule of thumb when RAM was
expensive (and memory sizes were small). Anymore (especially on systems
with >256MB RAM), the rule doesn't really apply.
Note, though, that I am not recommending any specific swap sizes--I'm
only saying the rule doesn't really apply for most modern systems.
Google for "linux swap size" (no quotes) to see all the competing
theories on the best way to size your swap, then roll a die (or cast
some bones, or read some tea leaves, or ...) and figure your required
swap size.
Mike
More information about the mythtv-dev
mailing list