我已經寫了一些代碼,其工作沒有錯誤。該代碼使用MySQLdb進行(頻繁)數據庫訪問,並使用4個不同的數據庫。還會生成一些日誌文件並使用日誌記錄模塊。真正令人擔憂的是,運行Valgrind的時候,我得到以下Python2.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模塊?
你爲什麼使用7歲的蟒蛇版本?這與使用PHP3而不是PHP5幾乎一樣糟糕(好吧,Python 2.4比現在的版本要好很多,但是無論如何) – ThiefMaster 2011-04-19 11:44:23
我使用Scientific Linux,這是他們提供的版本。 – RedBaron 2011-04-19 11:48:35
我相信你可以在某處獲得更新版本的RPM。 – ThiefMaster 2011-04-19 11:50:23