python - Python2.4 上的 Valgrind : Huge amount of memory 'possibly lost'

标签 python mysql memory-leaks valgrind python-2.4

我已经编写了一些可以正常运行的代码。该代码使用 MySQLdb 进行(频繁)数据库访问,并使用 4 个不同的数据库。还生成了几个日志文件并使用了日志记录模块。真正担心的是,当运行 Valgrind 时,我得到以下内容

==7840== LEAK SUMMARY:
==7840==    definitely lost: 29 bytes in 1 blocks
==7840==    indirectly lost: 0 bytes in 0 blocks
==7840==      possibly lost: 1,104,793 bytes in 8,865 blocks
==7840==    still reachable: 70,684 bytes in 2,194 blocks
==7840==         suppressed: 0 bytes in 0 blocks

最大的泄漏是

==7840== 393,216 bytes in 1 blocks are possibly lost in loss record 1,585 of 1,585
==7840==    at 0x4005903: malloc (vg_replace_malloc.c:195)
==7840==    by 0x204929E: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x2054833: PyString_InternInPlace (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x20A0362: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209FB15: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x20A0075: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209FB15: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x20A0068: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x20A04CC: PyMarshal_ReadObjectFromString (in /usr/lib /libpython2.4.so.1.0)
==7840==    by 0x20A1D20: PyMarshal_ReadLastObjectFromFile (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209AA63: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209CB7E: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209D9B2: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209DE71: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x209E087: PyImport_ImportModuleEx (in /usr/lib/libpython2.4.so.1.0)
==7840==    by 0x207DB2D: ??? (in /usr/lib/libpython2.4.so.1.0)

所以你看,它显示可能丢失了近 1MB 的内存。我的代码是否存在真正的问题,或者是否使用 MySQLdb 提供了这种行为。另外为了最小化它,我应该明确释放对象(包括文件、数据库连接)还是有一个我可以研究的Python模块?

最佳答案

Python 在 malloc 之上使用自己的内存分配器,这会在使用 valgrind 时导致问题。请参阅Misc/README.valgrind详细解释。假设您不打算重建 Python,解决方案是使用 Misc/valgrind-python.supp作为抑制文件,并取消注释其中抑制 PyObject_FreePyObject_Realloc 警告的行。

关于python - Python2.4 上的 Valgrind : Huge amount of memory 'possibly lost' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715801/

相关文章:

memory - iOS 6,崩溃并出现内存不足警告

python - Alembic 降级似乎不理解元数据

php - 字符编码和站点安全

MAMP 中的 catch-22 中的 MySQL InnoDB

ruby - Sidekiq 在工作人员完成后不释放内存

ios - 尝试释放 NSMutableArray 时出现泄漏

python - 如何让我的记录器在 Python Flask 应用程序中使用每个页面 View 的唯一 ID 进行记录?

python - Tkinter IntVar 返回 PY_VAR0 而不是值

python - Django中的继承: child class updates parent with empty fields

php - 如何提高 Laravel 过滤系统中多对多关系的查询速度?