[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#7651) LMDB: Uncontrolled database when opened from multiple processes
- To: openldap-its@OpenLDAP.org
- Subject: Re: (ITS#7651) LMDB: Uncontrolled database when opened from multiple processes
- From: hyc@symas.com
- Date: Wed, 31 Jul 2013 15:13:11 GMT
- Auto-submitted: auto-generated (OpenLDAP-ITS)
Dimitrij Denissenko wrote:
> Makes sense, but out of interest: shouldn't the file size drop again,
> when locked pages are released?
No. All allocated pages get reused internally, so there's no point giving them
back to the OS.
>
> On 31/07/13 15:34, Howard Chu wrote:
>> dimitrij.denissenko@blacksquaremedia.com wrote:
>>> Hi again,
>>>
>>> I was able to recreate the scenario in a test case. I must have mixed
>>> something up previously. After more tests it seems that the memory
>>> growth only appears when transactions are reset within the child.
>>>
>>> Here's the full code:
>>> https://gist.github.com/dim/6122131
>>>
>>> Output on my machine:
>>>
>>> $ rm -f testdb/* && mkdir -p testdb && make mtest8 && ./mtest8
>>> gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast
>>> -c mtest8.c
>>> gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast
>>> mtest8.o liblmdb.a -o mtest8
>>> NO FORK : 1699840
>>> FORK & OPEN : 1699840
>>> FORK & COPY : 6225920
>>
>> This behavior is expected. Your child process is holding a read txn
>> while it performs the env_copyfd(). During that time writers are not
>> able to reuse old data pages, so all writes consume new pages. When
>> the copyfd completes and releases its read txn the writers will resume
>> reusing old pages.
>>
>> There's no bug here, this ITS will be closed.
>>
>
>
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/