使用 MALLOC_MMAP_THRESHOLD_ 和 MALLOC_MMAP_MAX_ 减少内存碎片

2023-12-26

我一直在尝试使用 MALLOC_MMAP_THRESHOLD_ 和 MALLOC_MMAP_MAX_ env 变量来影响长时间运行的 Python 2 进程中的内存管理。 看http://man7.org/linux/man-pages/man3/mallopt.3.html http://man7.org/linux/man-pages/man3/mallopt.3.html

我从这个错误报告中得到了这个想法:http://bugs.python.org/issue11849 http://bugs.python.org/issue11849

我得到的结果令人鼓舞:内存碎片减少了,长时间运行的进程使用的内存中可见的典型高水位线也更低。

我唯一担心的是,当使用如此低水平的调整时,是否会有其他副作用可能会产生影响。有人有使用它们的经验吗?

下面是一个示例脚本,展示了这些变量如何影响生成大型字典的脚本中的 RSS 内存:https://gist.github.com/lbolla/8e2640133032b0a6bb9c https://gist.github.com/lbolla/8e2640133032b0a6bb9c只需运行“alloc.sh”并比较输出。这是我的输出:

MALLOC_MMAP_THRESHOLD_=None MALLOC_MMAP_MAX_=None
N=9 RSS=120968
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=None
N=9 RSS=157008
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=None
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=None
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=None
N=9 RSS=98496
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=None
N=9 RSS=98528
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=0
N=9 RSS=121012
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=0
N=9 RSS=121000
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=16777216
N=9 RSS=157004
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98496
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98528

正如您所看到的,本示例中使用的 RSS 比普通 Python 少了约 20%。


通过这种调整已经在生产环境中使用了很长一段时间,没有出现任何问题。 因此,我认为在某些情况下,这是提高长时间运行的 Python 进程的内存使用率的可行选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MALLOC_MMAP_THRESHOLD_ 和 MALLOC_MMAP_MAX_ 减少内存碎片 的相关文章

随机推荐