はじめに
メモリリークの検知によく使われるツールとして、Valgrindがある。しかし、Valgrindを使おうとしても、Python 3.5以前では、コンパイルからやり直す必要があった。しかし、Python 3.6以降では、環境変数PYTHONMALLOC
でメモリアロケータを変更できるようになった。このため、簡単にメモリリークの調査が出来るようになった。
PYTHONMALLOC=debug ./python membug.py
なお、Valgrindの仕組みは、ダイナミックリンカーの環境変数であるLD_PRELOADをつかって、関数置き換えにより振る舞いを監視する。このため、共有ライブラリの関数の監視なら使うことが出来る。