微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么在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 举报,一经查实,本站将立刻删除。