【问题标题】:When does Dash release memory?Dash什么时候释放内存?
【发布时间】:2021-12-03 20:19:22
【问题描述】:

我编写了一个 python Dash 应用程序,并使用 OpenShift 在我的组织中提供了它。我对 OpenShift 不是很了解,但它似乎运行正常,包括涉及多个用户时。

我的问题是内存管理。 当我在 OpenShift 上查看时,每次用户启动新会话时,Dash 应用程序使用的内存都会增加约 200MB。当用户关闭浏览器选项卡时,消耗的内存不会减少(即使是几周后)。从本质上讲,Dash 应用程序消耗的内存量一直在增长。

我可能遗漏了一些东西,但是如何在用户关闭浏览器选项卡后或自上次操作后经过一段时间后让 Dash 清除内存?我代码中的 dcc.Store 对象具有“storage_type = ‘memory’”。但据我了解,dcc.Store 将所有存储在客户端的数据保存在浏览器中,因此这不应该增加服务器上的内存。

我部署了我的应用程序

app.run_server(debug=True, dev_tools_hot_reload=False, port=8080, host=“0.0.0.0”)

万一这很重要。

任何帮助将不胜感激!现在我一直手动重新启动应用程序以清除内存,但这根本不实用。谢谢!

【问题讨论】:

  • 用户结束会话后内存最终会下降吗?我猜要么正在发生一些缓存,要么会话没有在远程端终止,要么存在内存泄漏。
  • 内存似乎永远不会下降。这不能是我的 dcc.Store() 对象吗?那应该是客户端浏览器中的内存,而不是服务器上的内存?此外,Dash 何时/如何意识到用户终止了会话?如果用户关闭选项卡?会话的结束是否应该触发某种清理功能来删除与之相关的任何内存?
  • 该错误很可能与您的实施有关。请发布一个演示该问题的 MWE(代码)。
  • 不幸的是,我为我的公司编写了此代码,我必须共享专有输入数据才能让您对其进行测试。它也有几千行长,因此很难确定这个问题的根源,因此很难制作 MWE。为了追踪这个问题,我可以在这里检查任何明显的东西吗?我只是在使用我认为的标准回调。或者,我是否可以更改 Python 脚本,使其每周重新启动以清除内存?

标签: python openshift plotly-dash


【解决方案1】:

您为容器分配了多少内存?另外,内存是否不断增加?或者一旦它达到一定水平,它就会停滞不前?您是否在 Python 中跟踪任何 GC 行为?

我不是 Python 内存管理方面的专家,对 Dash 也一无所知,但 Python 确实管理自己的内存堆并且有一个垃圾收集器。因此,Python 从不释放内存是完全正常的行为,Python 本质上是保留内存以备将来使用。一旦它需要内存,它将垃圾收集未引用的对象。

只要您没有耗尽内存或看到不良的 GC 行为,最好的办法就是为容器设置合理的内存请求/限制,并让 Python GC 管理已分配的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多