cx_Oracle - Django ORM - 引用计数增加

时间:2014-12-27 21:17:08

标签: python django python-2.7 orm cx-oracle

我有一个长期运行的Python进程,它使用Django ORM对抗Oracle数据库。

过程的规模继续稳步增长。

我正在使用mem_top分析这个过程,我发现一个特定数据类型的引用计数随着迭代而不断增加。

数据类型是[{u'时间':你' 0.004',你' sql':你' QUERY = u \'选择" RANGE_STATUS"。"我

参考文献从534增加到53295

此列表似乎几乎包含使用ORM执行的所有查询

这是否意味着cx_Oracle模块或Django ORM中的某处存在内存泄漏?

以下是间隔10分钟的两次迭代之间的memtop结果。

警告:2014年12月27日05:45:46:

refs:
9500    <type 'dict'> {'TAPE_DRIVE_FORMAT': -1610612736, 'SLE_ERROR': 1, 'IMAGE_REL_I386_SEC
8410    <type 'list'> [('200', '343045', 1321), ('200', '343046', 1322), ('200', '343047', 1
1578    <type 'dict'> {'logging.atexit': None, 'django.core.files.errno': None, 'django.test
1567    <type 'list'> ['mem_top', 'mem_top', 'datetime', 'datetime', 'sys', 'string', 'os', 
688 <type 'dict'> {'FILE_SYSTEM_ATTR': 2, 'GetDriveTypeW': <built-in function GetDriveTy
688 <type 'dict'> {'FILE_SYSTEM_ATTR': 2, 'GetDiskFreeSpaceEx': <built-in function GetDi
534 <type 'list'> [{u'time': u'0.004', u'sql': u'QUERY = u\'SELECT "RANGE_STATUS"."I
510 <type 'dict'> {'GetDiskFreeSpaceEx': <built-in function GetDiskFreeSpaceEx>, 'SetThr
510 <type 'dict'> {'GetDiskFreeSpaceEx': <built-in function GetDiskFreeSpaceEx>, 'SetThr
370 <type 'list'> [<weakref at 01CF5030; to 'type' at 1E228030 (type)>, <weakref at 01CF
types:
8625     <type 'function'>
3778     <type 'tuple'>
3128     <type 'dict'>
1672     <type 'list'>
1661     <type 'cell'>
1440     <type 'weakref'>
1351     <type 'wrapper_descriptor'>
1103     <type 'builtin_function_or_method'>
888  <type 'type'>
734  <type 'getset_descriptor'>

警告:2014年12月27日05:54:37:

refs:
53295   <type 'list'> [{u'time': u'0.004', u'sql': u'QUERY = u\'SELECT "RANGE_STATUS"."I
9500    <type 'dict'> {'TAPE_DRIVE_FORMAT': -1610612736, 'SLE_ERROR': 1, 'IMAGE_REL_I386_SEC
8410    <type 'list'> [('200', '343045', 1321), ('200', '343046', 1322), ('200', '343047', 1
1578    <type 'dict'> {'logging.atexit': None, 'django.core.files.errno': None, 'django.test
1567    <type 'list'> ['mem_top', 'mem_top', 'datetime', 'datetime', 'sys', 'string', 'os', 
749 <type 'list'> ['A. HISTORY OF THE SOFTWARE', '==========================', '', 'Pyth
688 <type 'dict'> {'FILE_SYSTEM_ATTR': 2, 'GetDriveTypeW': <built-in function GetDriveTy
688 <type 'dict'> {'FILE_SYSTEM_ATTR': 2, 'GetDiskFreeSpaceEx': <built-in function GetDi
510 <type 'dict'> {'GetDiskFreeSpaceEx': <built-in function GetDiskFreeSpaceEx>, 'SetThr
510 <type 'dict'> {'GetDiskFreeSpaceEx': <built-in function GetDiskFreeSpaceEx>, 'SetThr
types:
8625     <type 'function'>
3778     <type 'tuple'>
3130     <type 'dict'>
1675     <type 'list'>
1661     <type 'cell'>
1440     <type 'weakref'>
1351     <type 'wrapper_descriptor'>
1103     <type 'builtin_function_or_method'>
888  <type 'type'>
734  <type 'getset_descriptor'>

请指导。

1 个答案:

答案 0 :(得分:0)

事实证明,在我的Django设置中,我有Debug = True。 。 。把它变成False解决了这个问题。使用Debug = True,django在内部构建一个列表,我看到它有过多的引用计数。