先日jupyterでmatplotlibに画像を吐き出させ続けていたところ1000枚ぐらい吐き出したあたりで突然jupyterのkernelが落ちました。嫌な予感がしてメモリの使用量を追ってみると処理を繰り返すに連れメモリの使用量が増加していき画像1000枚処理したあたりでメモリを4GB喰っていました。その時は仮想環境でメモリを4GBしか設定していなかったのでそこでkernelが落ちたということだったのですが、きちんとplt.close()を毎回ループの中で行っているのにも関わらずこれだけメモリを喰うのはおかしくないかと思い調べてみました。
調べても殆どはちゃんとplt.close()
呼べよみたいな記事しか見つからなくて困っていたのですがのですが最終的に
%matpolotlib inline
にメモリリークバグがあるとの記事に行き当たりました。
Memory leak with %matplotlib inline · Issue #7270 · ipython/ipython · GitHub
これはplot.show()するしないに関わらず発生するようです。私はループの中で
plt = make_plot(df)# dataframeを処理してplotを返す自作関数
plt.savefig(・)
plt.close()
してる最中にこのバグに遭遇しました。
うん千枚の画像をnotebook内に表示する必要は一切無いですし自身も画像を保存したいだけでしたので%matpolotlib inline
をコメントアウトすることで解決しました。
めでたしめでたし。