Python 如何准确查看程序内存占用情况
在Python开发中,精准掌握程序内存占用有助于排查泄漏与优化性能。本文通过 psutil 和 memory_profiler 两个核心工具,演示如何获取单进程的实时内存消耗、操作系统总内存状态,以及如何逐行分析函数级的内存增量变化。配合标准代码示例与终端指令,帮助开发者快速建立内存监控流程。
准备环境与基础工具
监控 Python 程序内存主要依赖两个轻量级第三方库:psutil 用于获取当前进程及操作系统的内存视图,memory_profiler 用于精细化到每一行代码的内存分配记录。若需重现文中的矩阵运算测试案例,建议同时安装 numpy。
pip install psutil memory_profiler numpy逐行分析代码内存变化
当需要定位具体某段逻辑为何吃掉大量内存时,memory_profiler 是最直观的工具。它可以通过装饰器自动拦截函数执行,并在控制台输出每行代码带来的内存增减量。
第1步:编写带分析标记的测试脚本
打开文本编辑器,新建脚本文件(如 mem_test.py)。在目标函数顶部添加 @profile 装饰器,引入必要的系统模块进行前后内存值对比与手动垃圾回收验证:
import numpy as np
import os
import psutil
import gc
from memory_profiler import profile
@profile
def test_memory():
# 创建一个较大的二维数组,观察内存突增
a = np.full(shape=(600, 700), fill_value=99.0)
return a
if __name__ == '__main__':
obj = test_memory()
# 打印当前进程的实际物理内存占用(RSS),单位MB
print('A:%.2f MB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024))
del obj
gc.collect() # 强制触发垃圾回收,确保内存正确释放
print('B:%.2f MB' % (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024))第2步:通过终端运行并查看详细报告
保存脚本后,不要直接在 IDE 内部运行(部分集成环境会拦截分析器的标准输出)。在项目根目录打开终端,执行标准模块调用命令:
python -m memory_profiler mem_test.py终端将按列输出详细的分析报表。表头依次代表:行号、当前累计内存(MiB)、该行导致的增量(MiB)以及执行次数。执行完毕后,脚本底部会打印您自定义的前后对比结果:
A:56.83 MB
B:53.83 MB
可见数据块被销毁且 GC 执行后,常驻内存稳定回落,证明内存分配机制正常。若发现某一行增量异常偏高,即可针对性进行数据结构重构或分块处理。
实时监控当前进程与系统内存
除了单函数剖析,开发者常需在长运行服务中定期打印资源水位。psutil 提供了一致跨平台的接口来查询虚拟内存池分布。
第1步:获取操作系统总内存信息
调用 virtual_memory() 可直接拉取宿主机的完整内存画像,包含总量、可用量、已用百分比及交换空间状态。这在容器化部署或云服务器调优时极为常用。
第2步:绑定当前 PID 查看独立开销
结合 Process(os.getpid()) 可锁定当前脚本自身的物理内存峰值。以下是一段可直接复用的监控封装逻辑:
import psutil
import os
info = psutil.virtual_memory()
print(f'当前程序已分配内存:{psutil.Process(os.getpid()).memory_info().rss} Bytes')
print(f'系统总内存:{info.total} Bytes')
print(f'系统内存整体占比:{info.percent}%')
print(f'CPU 核心数:{psutil.cpu_count()}')在实际业务中,可将上述 print 语句替换为日志记录组件,设定固定频率轮询。当 rss 数值呈单调递增且不随任务结束下降时,通常意味着存在引用未释放或闭包缓存导致的内存泄漏。
完成判断与排错建议
成功建立监控后,可通过以下特征确认工具生效:
- 终端输出出现清晰的 Line # Mem Usage Increment 表格;
- 手动删除大对象并调用 gc.collect() 后,RSS 数值回归基线;
- 系统级查询返回的百分比与任务管理器/系统监视器显示一致。
若遇到 ModuleNotFoundError,请检查是否在当前 Python 虚拟环境中执行了安装命令。对于高并发 Web 服务,建议在压测阶段同步开启此监控模块,避免生产环境因突发流量导致 OOM(Out Of Memory)崩溃。
以上就是 Python 查看程序内存占用情况的详细内容,更多关于 Python 性能优化与资源监控的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













