【问题标题】:Matplotlib: Memory and 'CPU' leakMatplotlib:内存和“CPU”泄漏
【发布时间】:2018-09-06 22:36:54
【问题描述】:
python: 2.7
Ubuntu: 18.04
matpltolib: 2.2.2

我有一个客户端 GUI,它从服务器获取信息并显示它。我看到内存泄漏和 CPU 消耗随时间的变化。下图显示了使用 GUI 重新启动客户端后 CPU 和内存利用率的变化(距离右侧约 25 秒,与网络流量中的一个调子对齐)。

CPU 图表的 CPU 使用率有所下降,表明程序重启前后 CPU 使用率不同。

内存图显示内存利用率大幅下降,然后由于同一程序的初始化而略有增加。

网络图出现峰值,因为客户端向服务器请求所有数据以进行可视化。

我怀疑这与 matplotlib 有关。我有 7 个数字,每 3 秒重新绘制一次。

我添加了我的 GUI 图像。中间的 4 个图表是历史图表。但是,我将所有数据点合并到 300 个 bin 中,因为我在该区域有 ~ 300 个像素。分箱在单独的线程中完成。存储信息的数据数组(2x1 000 000 点、时间和值)是从一开始就创建的,以确保我的数据集增长时不会出现任何内存失控问题。我预计数据集不会超过这个范围,因为典型的实验以 0.1-0.01 Hz 的频率运行,这需要几百万秒才能到达终点。

问题:如果是Matplotlib,我该怎么办?如果不是,那还能是什么?

于 2018 年 9 月 6 日添加: 我想添加另一个示例。这是我关闭 GUI 后 CPU 和内存使用情况的屏幕截图。代码运行了约 3 天。 Python 2.7,Ubuntu 18.04.1。

【问题讨论】:

  • 泄漏点在哪里?您的使用几乎是恒定的。您确定重启后的差异不是来自重启后无法立即使用的瞬态数据吗?
  • 看起来你启动了一个进程,这个进程消耗了 CPU 和内存。这是非常值得期待的。从提供的信息中,无法找出是什么进程以及是否预期内存/cpu 使用量。如果没有进程代码的minimal reproducible example,这个问题似乎也不是 Stackoverflow 的主题。
  • @MisterMiyagi,1) 泄漏速度非常慢,无法在那种规模上看到。
  • 当我启动 Firefox 并使用它半天时,也会发生同样的情况。这对于计算机程序来说是很正常的,不是吗?所以我在理解这个问题时确实有严重的问题。
  • 这个问题的读者都不知道你的软件(哈勃望远镜软件也不知道)。根据代码的外观,内存使用量可能会增加,也可能不会 - 如果没有访问正在使用的软件,任何人都无法发现。

标签: python-2.7 matplotlib ubuntu-18.04


【解决方案1】:

感谢大家提供帮助的 cmets。 经过一番挣扎,我想出了解决问题的方法。不幸的是,我对我的代码进行了几处更改,所以我不能确切地说出真正有什么帮助。

这里做了什么:

  1. 所有图表都在单独的线程中完成。图像使用 io.Bytes() 作为字节流保存在缓冲区中,然后传递给 GUI。这对我解决另一个问题很重要(GUI freezes while charting with matplotlib)。

  2. 每次生成绘图时都创建一个新图形(figure = Figure(figsize=(7,8),dpi=80))。以前我一直在重用同一个图(self.figure = Figure(figsize=(7,8),dpi=80))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 2013-02-27
    • 1970-01-01
    • 2010-11-17
    • 2021-12-01
    • 1970-01-01
    • 2013-05-26
    • 2010-12-02
    相关资源
    最近更新 更多