pypy / pypy

PyPy is a very fast and compliant implementation of the Python language.
https://pypy.org
Other
832 stars 42 forks source link

pypy2.7/pypy3.6/pypy3.9 dbm seems to have memory leak #3829

Open gitlab-importer opened 1 year ago

gitlab-importer commented 1 year ago

In Heptapod by @egmkang on Oct 13, 2022, 08:49

this is a simple example:

import dbm
import gc

db = dbm.open("test", "c")
db.close()

db = dbm.open("test", "r")
total_count = 0

dat = dbm.datum("1313131313131313")

while True:
    # memory leak here
    value = db.get("13131313131313", "")
    # getattr(dbm.lib, dbm.funcs['fetch'])(db._aobj, dat)
    total_count += 1

    if total_count % 300000 == 0:
        gc.collect_step()
        print(total_count // 300000, gc.get_stats())

memory_leak.py

Python 2.7.13 PyPy 7.0.0 Ubuntu 20.04

image

Total memory consumed:
    GC used:            6.9MB (peak: 13.3MB)
       in arenas:            4.5MB
       rawmalloced:          1.5MB
       nursery:              1.0MB
    raw assembler used: 199.7kB
    -----------------------------
    Total:              7.1MB

    Total memory allocated:
    GC allocated:            9.5MB (peak: 15.0MB)
       in arenas:            5.3MB
       rawmalloced:          7.0MB
       nursery:              1.0MB
    raw assembler allocated: 1.0MB
    -----------------------------
    Total:                   10.5MB

    Total time spent in GC:  14.281

pypy3 has this problem too:

Python 3.6.9 (7.3.1+dfsg-4, Apr 22 2020, 05:15:29)
[PyPy 7.3.1 with GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

image

pmap 1:

134217:   ../pypy3.9-v7.3.9-linux64/bin/pypy3 memory_leak.py
0000000000400000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000401000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000402000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000403000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000404000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000002237000  99196K rw---   [ anon ]
00007f05479f6000   4128K rw---   [ anon ]
00007f0547dfe000     28K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0547e05000   2048K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0548005000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0548006000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0548008000    128K r---- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f0548028000   1288K r-x-- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f054816a000    276K r---- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f05481af000     28K r---- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f05481b6000      4K rw--- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f05481bb000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481bc000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481bd000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481be000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481bf000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481c0000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481c1000   1032K rw---   [ anon ]
00007f05482c3000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c4000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c5000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c6000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c7000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c8000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c9000    148K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05482ee000   2044K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484ed000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484ee000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484ef000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484f1000     12K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f4000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f5000      8K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f7000      8K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f9000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484fa000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484fb000   3096K rw---   [ anon ]
00007f0548801000   1024K rwx--   [ anon ]
00007f0548901000   1548K rw---   [ anon ]
00007f0548a84000   2968K r---- /usr/lib/locale/locale-archive
00007f0548d6a000   2452K rw---   [ anon ]
00007f0548fcf000     12K r---- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fd2000     72K r-x-- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fe4000     16K r---- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fe8000      4K r---- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fe9000      4K rw--- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fea000      8K rw---   [ anon ]
00007f0548fec000     60K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0548ffb000     88K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549011000     60K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549020000     16K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549024000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549025000      4K rw---   [ anon ]
00007f0549026000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549028000     40K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549032000    148K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549057000     32K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f054905f000      4K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549060000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549061000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549062000     12K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549065000     28K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054906c000   2044K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054926b000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054926c000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054926e000      8K r---- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549270000     16K r-x-- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549274000      8K r---- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549276000      4K r---- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549277000      4K rw--- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549278000      8K r---- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f054927a000     68K r-x-- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f054928b000     24K r---- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549291000      4K ----- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549292000      4K r---- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549293000      4K rw--- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549294000     52K r---- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05492a1000    668K r-x-- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f0549348000    612K r---- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05493e1000      4K r---- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05493e2000      4K rw--- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05493e3000      8K rw---   [ anon ]
00007f05493e5000     16K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f05493e9000    164K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f0549412000     36K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941b000      4K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941c000      8K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941e000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941f000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f0549420000      4K r---- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549421000      8K r-x-- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549423000      4K r---- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549424000      4K r---- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549425000      4K rw--- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549426000      4K r---- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f0549427000      4K r-x-- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f0549428000      4K r---- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f0549429000      4K r---- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f054942a000      4K rw--- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f054942b000    136K r---- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f054944d000   1504K r-x-- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f05495c5000    312K r---- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f0549613000     16K r---- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f0549617000      8K rw--- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f0549619000     16K rw---   [ anon ]
00007f054961d000     24K r---- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f0549623000     68K r-x-- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f0549634000     24K r---- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f054963a000      4K r---- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f054963b000      4K rw--- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f054963c000     16K rw---   [ anon ]
00007f0549643000     28K r--s- /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
00007f054964a000  18652K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054a881000  19292K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054bb58000   3452K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054beb7000    116K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054bed4000  21488K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054d3d0000    196K rw---   [ anon ]
00007f054d401000     36K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054d40a000      8K rw---   [ anon ]
00007f054d40c000      4K r---- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d40d000    140K r-x-- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d430000     32K r---- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d438000      4K rwx--   [ anon ]
00007f054d439000      4K r---- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d43a000      4K rw--- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d43b000      4K rw---   [ anon ]
00007ffc40dd5000    132K rw---   [ stack ]
00007ffc40dfc000     12K r----   [ anon ]
00007ffc40dff000      4K r-x--   [ anon ]
ffffffffff600000      4K --x--   [ anon ]
 total           191780K

run for a while:

134217:   ../pypy3.9-v7.3.9-linux64/bin/pypy3 memory_leak.py
0000000000400000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000401000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000402000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000403000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000000404000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/pypy3.9
0000000002237000 589012K rw---   [ anon ]
00007f05479f6000   4128K rw---   [ anon ]
00007f0547dfe000     28K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0547e05000   2048K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0548005000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0548006000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libgdbm.so.4
00007f0548008000    128K r---- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f0548028000   1288K r-x-- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f054816a000    276K r---- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f05481af000     28K r---- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f05481b6000      4K rw--- /usr/lib/x86_64-linux-gnu/libdb-5.3.so
00007f05481bb000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481bc000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481bd000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481be000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481bf000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481c0000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_gdbm_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05481c1000   1032K rw---   [ anon ]
00007f05482c3000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c4000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c5000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c6000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c7000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c8000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_pwdgrp_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05482c9000    148K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05482ee000   2044K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484ed000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484ee000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484ef000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/liblzma.so.5
00007f05484f1000     12K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f4000      4K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f5000      8K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f7000      8K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484f9000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484fa000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/pypy3.9/_lzma_cffi.pypy39-pp73-x86_64-linux-gnu.so
00007f05484fb000   3096K rw---   [ anon ]
00007f0548801000   1024K rwx--   [ anon ]
00007f0548901000   1548K rw---   [ anon ]
00007f0548a84000   2968K r---- /usr/lib/locale/locale-archive
00007f0548d6a000   2452K rw---   [ anon ]
00007f0548fcf000     12K r---- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fd2000     72K r-x-- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fe4000     16K r---- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fe8000      4K r---- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fe9000      4K rw--- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
00007f0548fea000      8K rw---   [ anon ]
00007f0548fec000     60K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0548ffb000     88K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549011000     60K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549020000     16K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549024000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549025000      4K rw---   [ anon ]
00007f0549026000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libtinfow.so.6
00007f0549028000     40K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549032000    148K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549057000     32K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f054905f000      4K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549060000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549061000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549062000     12K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libncursesw.so.6
00007f0549065000     28K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054906c000   2044K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054926b000      4K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054926c000      8K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libffi.so.6
00007f054926e000      8K r---- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549270000     16K r-x-- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549274000      8K r---- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549276000      4K r---- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549277000      4K rw--- /usr/lib/x86_64-linux-gnu/librt-2.31.so
00007f0549278000      8K r---- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f054927a000     68K r-x-- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f054928b000     24K r---- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549291000      4K ----- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549292000      4K r---- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549293000      4K rw--- /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
00007f0549294000     52K r---- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05492a1000    668K r-x-- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f0549348000    612K r---- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05493e1000      4K r---- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05493e2000      4K rw--- /usr/lib/x86_64-linux-gnu/libm-2.31.so
00007f05493e3000      8K rw---   [ anon ]
00007f05493e5000     16K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f05493e9000    164K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f0549412000     36K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941b000      4K ----- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941c000      8K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941e000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f054941f000      4K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/lib/libexpat.so.1
00007f0549420000      4K r---- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549421000      8K r-x-- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549423000      4K r---- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549424000      4K r---- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549425000      4K rw--- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
00007f0549426000      4K r---- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f0549427000      4K r-x-- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f0549428000      4K r---- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f0549429000      4K r---- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f054942a000      4K rw--- /usr/lib/x86_64-linux-gnu/libutil-2.31.so
00007f054942b000    136K r---- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f054944d000   1504K r-x-- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f05495c5000    312K r---- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f0549613000     16K r---- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f0549617000      8K rw--- /usr/lib/x86_64-linux-gnu/libc-2.31.so
00007f0549619000     16K rw---   [ anon ]
00007f054961d000     24K r---- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f0549623000     68K r-x-- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f0549634000     24K r---- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f054963a000      4K r---- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f054963b000      4K rw--- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
00007f054963c000     16K rw---   [ anon ]
00007f0549643000     28K r--s- /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
00007f054964a000  18652K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054a881000  19292K r-x-- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054bb58000   3452K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054beb7000    116K r---- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054bed4000  21488K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054d3d0000    196K rw---   [ anon ]
00007f054d401000     36K rw--- /home/tyhall51/pypy3.9-v7.3.9-linux64/bin/libpypy3.9-c.so
00007f054d40a000      8K rw---   [ anon ]
00007f054d40c000      4K r---- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d40d000    140K r-x-- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d430000     32K r---- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d438000      4K rwx--   [ anon ]
00007f054d439000      4K r---- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d43a000      4K rw--- /usr/lib/x86_64-linux-gnu/ld-2.31.so
00007f054d43b000      4K rw---   [ anon ]
00007ffc40dd5000    132K rw---   [ stack ]
00007ffc40dfc000     12K r----   [ anon ]
00007ffc40dff000      4K r-x--   [ anon ]
ffffffffff600000      4K --x--   [ anon ]
 total           681596K

the diff is:

image

image

gitlab-importer commented 1 year ago

In Heptapod by @mattip on Oct 13, 2022, 08:56

That version of PyPy is quite old (released Feb 2019). Does the problem reproduce on 7.3.9?

gitlab-importer commented 1 year ago

In Heptapod by @egmkang on Oct 13, 2022, 09:05

@mattip Python 3.6.9 (7.3.1+dfsg-4, Apr 22 2020, 05:15:29) has this problem too

gitlab-importer commented 1 year ago

In Heptapod by @egmkang on Oct 13, 2022, 11:10

image

Total memory consumed:
    GC used:            9.4MB (peak: 21.3MB)
       in arenas:            6.7MB
       rawmalloced:          1.7MB
       nursery:              1.0MB
    raw assembler used: 271.8kB
    -----------------------------
    Total:              9.6MB

    Total memory allocated:
    GC allocated:            18.7MB (peak: 23.0MB)
       in arenas:            14.3MB
       rawmalloced:          6.0MB
       nursery:              1.0MB
    raw assembler allocated: 1.0MB
    -----------------------------
    Total:                   19.7MB

    Total time spent in GC:  19.474
Python 3.9.12 (05fbe3aa5b0845e6c37239768aa455451aa5faba, Mar 29 2022, 08:15:34)
[PyPy 7.3.9 with GCC 10.2.1 20210130 (Red Hat 10.2.1-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.

@mattip

gitlab-importer commented 1 year ago

In Heptapod by @egmkang on Oct 14, 2022, 09:41

getattr(dbm.lib, dbm.funcs['fetch'])(db._aobj, dat)

just call this code, memory will growth

gitlab-importer commented 1 year ago

In Heptapod by @mattip on Oct 14, 2022, 10:10

>>>> Python 3.6.9 (7.3.1+dfsg-4, Apr 22 2020, 05:15:29)
[PyPy 7.3.1 with GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>> import dbm
>>>> getattr(dbm.lib, dbm.funcs['fetch'])(db._aobj, dat)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'dbm' has no attribute 'lib'
>>>> import dbm.lib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'dbm.lib'
gitlab-importer commented 1 year ago

In Heptapod by @egmkang on Oct 14, 2022, 10:20

@mattip pypy3 use this:

import dbm
import random
import gc

db = dbm.open("test", "c")
db.close()

db = dbm.open("test", "r")
total_count = 0

while True:
    value = db.get("13131313131313", "")
    total_count += 1

    if total_count % 300000 == 0:
        gc.collect_step()
        print(gc.get_stats(False))
gitlab-importer commented 1 year ago

In Heptapod by @mattip on Dec 17, 2022, 22:25

This code uses ctypes to call a function. If I short-circuit the __call__ to only wrap the arguments, skip the call, and return None, allocated memory grows. So it seems something is leaking out when calling _conv_param. I think it has to do with using memmove to copy a buffer around here since when I comment that out (for the db.get call), the allocated memory no longer grows.

gitlab-importer commented 1 year ago

In Heptapod by @mattip on Dec 18, 2022, 06:48

Adding this as a blocker for v7.3.11 since it seems to be a general ctypes issue and not specific to dbm

gitlab-importer commented 1 year ago

In Heptapod by @mattip on Dec 18, 2022, 09:47

If I short-circuit the __call__ to only wrap the arguments, skip the call, and return None, allocated memory grows.

A few hours later, I cannot reproduce this. Now the memory only grows when I actually do the call. The way you have set up the test, it is failing to find the data in the database (the database is empty). If I write a single key to the database, I do not see a leak. So I think this is something around the error path. Can you confirm that is correct?

If so, this is really only a dbm problem, and not a general one with ctypes. I am removing the milestone.