【问题标题】:cx_Oracle - Django ORM - Reference Count Increasecx_Oracle - Django ORM - 引用计数增加
【发布时间】:2015-02-24 14:48:12
【问题描述】:

我有一个长时间运行的 Python 进程,它使用 Django ORM 来处理 Oracle 数据库。

进程的规模不断增加。

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

数据类型为 [{u'time': u'0.004', u'sql': u'QUERY = u\'SELECT "RANGE_STATUS"."I

引用从 534 增加到 53295

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

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

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

警告:27/12/2014 05:45:46 PM:

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'>

警告:27/12/2014 05:54:37 PM:

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'>

请指导。

【问题讨论】:

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


    【解决方案1】:

    原来在我的 Django 设置中我有 Debug=True 。 . .将其设置为 False 解决了这个问题。使用 Debug=True django 在内部构建了一个列表,我认为该列表具有过多的引用计数。

    【讨论】:

    • 同样重要的是要记住,当打开 DEBUG 运行时,Django 会记住它执行的每个 SQL 查询。这在您调试时很有用,但它会迅速消耗生产服务器上的内存。
    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 2021-12-13
    • 2013-06-22
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多