内存泄漏最可靠信号是内存指标持续单向增长;需监控process_resident_memory_bytes或go_memstats_heap_inuse_bytes,结合GC频率、对象数量与业务流量交叉验证,并设置增长率与基线偏离告警。
直接看内存指标的持续单向增长趋势,是识别内存泄漏最可靠的第一信号。不是波动、不是偶发高峰,而是稳定爬升且不回落——这基本就是泄漏的铁证。
对 Python 应用,暴露 `process_resident_memory_bytes`(常驻内存)最直观;对 Go 应用,优先看 `go_memstats_heap_inuse_bytes`(堆内使用量)。这两个指标反映真实占用,排除缓存等干扰。
process_resident_memory_bytes{job="your-app"} or go_memstats_heap_inuse_bytes{job="your-app"}
内存增长不等于泄漏。需同步检查三类辅助信号:
确认泄漏存在后,下一步是缩小范围:
python -m tracemalloc -t your_app.py,或在运行中调用 tracemalloc.take_snapshot() 获取 top 分配源jmap -histo:live <pid></pid> 快速查看存活对象类型分布,重点关注 `HashMap`, `ArrayList`, 静态集合或未注销监听器光靠人工巡检太被动。用 Prometheus Rule 定义可量化的泄漏迹象:
rate(process_resident_memory_bytes[1h]) > 50 * 1024 * 1024(每小时涨超 50MB)(process_resident_memory_bytes - avg_over_time(process_resident_memory_bytes[24h])) / avg_over_time(process_resident_memory_bytes[24h]) > 0.3(偏离均值超 30%)rate(process_resident_memory_bytes[30m]) > 10 * 1024 * 1024 and rate(go_gc_duration_seconds_sum[30m]) > 0.5