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