Python Memory Profile

Python 程序运行时内存过大,被操作系统 kill 掉。为了找到内存占用的原因,需要用工具对 python 程序进行内存 profile。

使用 memray 可以对 python 程序进行 memory profile,过程记录如下:

由于我们的程序使用 supervisord 进行守护,先在 supervisord 中关闭该程序的自动重启。

# 列出服务列表
supervisorctl status

# 停止服务
supervisorctl stop <服务名称>

使用 PIP 安装 memray

pip install memray

使用 memray 启动被调试程序:

# 我的程序正常是使用 `python manage.py run_apscheduler` 来启动的
memray run manage.py run_apscheduler

当程序结束后,目录下出现一个 memray-manage.py.8559.bin 的文件。

使用下面命令将这个 bin 文件转换为 html 格式的火焰图:

root@web:/root ❯ memray flamegraph memray-manage.py.8559.bin
⚠  This capture file is large and may take a long time to process  ⚠

Next time, consider using the `--aggregate` option to `memray run` to reduce the size of the file.
Check https://bloomberg.github.io/memray/run.html#aggregated-capture-files for more information.

Wrote memray-flamegraph-manage.py.8559.html

之后就可以用浏览器打开这个html文件,查看哪些代码产生了大量的内存。

comments powered by Disqus