0
We recently noticed that our FastAPI application running on Gunicorn workers keeps consuming memory until the OS kills the process. Restarting workers periodically hides the problem, but it is not a real solution. What tools and techniques work best for diagnosing memory leaks in long-running Python applications?
Using tracemalloc for Memory Audits
Python includes the tracemalloc module to take snapshots of allocated memory blocks.
import tracemalloc
# Start tracking memory allocations
tracemalloc.start()
# Take initial memory snapshot
snapshot1 = tracemalloc.take_snapshot()
# Perform suspect operation
# ... application workload here ...
# Take second snapshot to compare
snapshot2 = tracemalloc.take_snapshot()
top_stats = snapshot2.compare_to(snapshot1, 'lineno')
# Print top memory diffs
for stat in top_stats[:5]:
print(stat)Common Causes
- Global caches growing indefinitely without TTL
- Unclosed file descriptors or database sessions
- Circular references preventing garbage collection