如何测量Python应用内存占用?从应用自身测量会不会有偏差?
内存测量与泄漏排查相关问题解答
应用内部测量内存是否不可取?
不是不可取,内部测量有独特的适用场景:它可以和你代码的执行节点(比如你示例中SHAP计算的第i轮)直接绑定,能够快速定位到具体哪段逻辑执行后内存出现上涨,适合粗定位泄漏触发点。只有当你需要完全排除测量逻辑本身的开销时,才建议优先用外部测量方案。
psutil是否会导致统计数值偏差?
psutil本身的统计逻辑是直接调用操作系统内核提供的公开接口获取进程数据,和外部系统工具的数据源完全一致,不会主动篡改统计结果。
仅需注意两个极小的影响点:
- psutil初始化、调用内存查询接口本身会产生 KB级的内存开销,对绝大多数内存泄漏(通常是MB/GB级的持续上涨)排查场景可以完全忽略;如果需要极致精确,可以在程序启动初期就完成psutil的初始化调用,提前消化这部分开销。
- 你示例中用到的字符串格式化、打印逻辑也会产生 临时内存占用,同样对泄漏排查的整体趋势判断没有影响。
Debian系统是否可以用top命令监控内存?
完全可以,top的数据同样来源于系统内核的/proc文件系统,和psutil的数据源同源,属于官方层面的可靠统计结果。你示例中打印的mem_info.rss对应top输出的RES列(常驻内存),mem_info.vms对应top输出的VIRT列(虚拟内存),两边数值可以直接对应验证。
如果要更高效排查内存泄漏,还可以使用这些比top更顺手的工具:
htop:界面更友好,支持进程筛选、数值排序,查看内存占用更直观ps定时采样:执行ps -o rss,vms,pid -p <目标进程ID>定时写入日志,方便后续统计内存变化趋势- 若需要定位具体泄漏代码位置,可以搭配
py-spy、valgrind等工具使用
内容的提问来源于stack exchange,提问作者user219820
相关产品推荐
相关产品推荐

