解读objgraph数字:内存泄漏?

2 投票
1 回答
1040 浏览
提问于 2025-04-16 13:10

我有一个用Python写的客户端-服务器应用程序,服务器已经运行了大约4天……它的内存使用量(通过/proc/PID/status中的VmSize查看)已经增长到大约660MB。我在想这是不是内存泄漏,所以我用了objgraph来打印出它的内存使用情况(前20种对象类型):

58524    tuple
33270    dict
15483    function
9976     list
5396     set
2644     weakref
2489     builtin_function_or_method
2482     instancemethod
1898     OrderedSet
1751     _BindParamClause
1680     _generated_label
1485     Comparator
1398     type
1315     InstrumentedAttribute
1267     CustomColumn
1165     cell
1146     ScalarAttributeImpl
1146     ColumnProperty
1146     ColumnLoader
1075     wrapper_descriptor

我没有看到什么特别“臭”的东西,我是不是漏掉了什么?也许这只是因为Python不会立即把未使用的内存释放给操作系统?
(这是一个CherryPy+SQLAlchemy的应用)

1 个回答

1

为了获取更有用的数据,可以让服务器运行几天,然后每天提取一次总结。关键是要观察哪些类型的对象在一天又一天中不断增加;这些对象类型很可能就是导致内存泄漏的罪魁祸首!如果你发现了什么,记得告诉我们哦。

撰写回答