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: >> [email protected] 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/
