Memory leak

Open
#370 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
25/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
jupyter-notebook, python
Domain
backend, frontend

Research direction

Start with the supplied minimal reproducer in a Jupyter notebook, comparing memory behavior with %matplotlib widget enabled and commented out. Investigate the ipympl widget integration and verify that after plotting and calling gc.collect(), the data frame and plot memory are released as expected.

Written by the indexing model from the issue text.

Description

Describe the issue

Plotting a 30M row data frame causes memory only to increase. Also memory isn't collected by gc.collect.
As discussed with matplotlib guys in https://github.com/matplotlib/matplotlib/issues/21259 (and Jupyter guys: https://github.com/jupyterlab/jupyterlab/issues/11182) - we tested and it works as intended. I tested further and think I found the issue - %matplotlib widget:

%matplotlib widget  # if this is commented out, gc.collect releases the memory

import gc

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


zeros = pd.Series(np.zeros(30_000_000))
df = pd.concat([zeros, zeros, zeros, zeros], axis=1)


FROM = 0
TO = 10_000_000  # df.shape[0]
color_spread = "grey"

fig, axs = plt.subplots(1, 1, sharex=True)

ax2 = axs.twinx()
ax2.plot(df[df.columns[0]][FROM:TO], color="blue")
ax2.plot(df[df.columns[1]][FROM:TO], color="red")
ax2.tick_params(axis="y", labelcolor="red")

ax1 = axs.twinx()
ax1.plot(df[df.columns[2]][FROM:TO], color="orange")
ax1.plot(df[df.columns[3]][FROM:TO], color="yellow")

fig.tight_layout()
plt.show()
gc.collect()

Versions

3.7.10 | packaged by conda-forge | (default, Feb 19 2021, 16:07:37) 
[GCC 9.3.0]
ipympl version: 0.7.0
jupyter core     : 4.7.1
jupyter-notebook : 6.4.3
qtconsole        : not installed
ipython          : 7.27.0
ipykernel        : 6.4.1
jupyter client   : 7.0.2
jupyter lab      : 3.1.11
nbconvert        : 6.1.0
ipywidgets       : 7.6.5
nbformat         : 5.1.3
traitlets        : 5.1.0
Config option `kernel_spec_manager_class` not recognized by `ListNBExtensionsApp`.
Known nbextensions:
  config dir: /home/test/PROGS/miniconda3/envs/puma-lab/etc/jupyter/nbconfig
    notebook section
      jupyter-matplotlib/extension  enabled 
      - Validating: OK
      nbdime/index  enabled 
      - Validating: OK
      jupyter-js-widgets/extension  enabled 
      - Validating: OK
      nbextensions_configurator/config_menu/main  enabled 
      - Validating: problems found:
        - require?  X nbextensions_configurator/config_menu/main
      contrib_nbextensions_help_item/main  enabled 
      - Validating: OK
    tree section
      nbextensions_configurator/tree_tab/main  enabled 
      - Validating: problems found:
        - require?  X nbextensions_configurator/tree_tab/main
Config option `kernel_spec_manager_class` not recognized by `ListLabExtensionsApp`.
[W 2021-10-07 12:20:00.836 LabApp] Config option `kernel_spec_manager_class` not recognized by `LabApp`.
JupyterLab v3.1.11
/home/test/PROGS/miniconda3/envs/puma-lab/share/jupyter/labextensions
        jupyter-matplotlib v0.9.0 enabled OK
        nbdime-jupyterlab v2.1.0 enabled OK
        @jupyterlab/git v0.32.2 enabled OK (python, jupyterlab-git)
        @pyviz/jupyterlab_pyviz v2.1.0 enabled OK (python, pyviz_comms)
        @jupyter-widgets/jupyterlab-manager v3.0.1 enabled OK (python, jupyterlab_widgets)

Other labextensions (built into JupyterLab)
   app dir: /home/test/PROGS/miniconda3/envs/puma-lab/share/jupyter/lab

Dominant language
Jupyter Notebook
Stars
1.7k
Forks
234
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from matplotlib/ipympl

All issues in matplotlib/ipympl

Similar issues

More Backend & API Design issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.