为什么在linux进程之间写入只读大对象时复制会使内存使用量不断增加

问题描述

我的服务器运行多处理,这些进程访问一个大对象(numpy.array/DatafFrame 的字典)(现在大约 25GB)。大对象在“逻辑上”是只读的。

我在生产中运行它并注意到一种内存泄漏:

  • 应用启动时所有进程的总内存为 25GB
  • 总内存使用量 (RSS) 在有请求时随时间不断增加,在没有请求时保持不变。 (根据请求,应用从共享字典中获取键值并进行计算)
  • 内存泄漏量与我创建的进程数成正比
  • 每个进程的内存使用几乎没有变化
  • 如果我只运行主进程(而不是多进程),内存使用几乎没有变化

理论上,大对象是通过copy-On-Write在进程间共享的,如果每个进程都没有修改就保持不变

我发现 a question 似乎有同样的问题,但问题是关于“有没有办法监控它”,答案确实给了我一些提示,但我仍然无法弄清楚问题

>

每个进程获取 RSS 的方式:

resource.getrusage(resource.RUSAGE_SELF).ru_maxRSS)

psutil.Process(os.getpid()).memory_info().RSS/1024)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)