1

長い実行時間でメモリ (8 GB) オーバーフローが発生したため、valgrind を使用してアプリケーションのメモリ リークを分析しました。メモリ使用量は実行時に増加します。

この動作が意図されている可能性があることがわかりました: Python メモリ リーク?

この動作を防ぐために新しいプロセスを生成する以外に方法はありますか?

既に Python ガベージ コレクターを使用しようとしましたが、成功しませんでした: Python でメモリを明示的に解放するにはどうすればよいですか?

私はPython 2.7.3を使用しています...

手動でトリガーされたガベージ コレクション:

3,145,728 bytes in 1 blocks are possibly lost in loss record 2,715 of 2,715
==16220==    at 0x4C28BED: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16220==    by 0x463DA4: ??? (in /usr/bin/python2.7)
==16220==    by 0x4A1BB1: PyString_InternInPlace (in /usr/bin/python2.7)
==16220==    by 0x4AAED0: ??? (in /usr/bin/python2.7)
==16220==    by 0x4AAFD6: ??? (in /usr/bin/python2.7)
==16220==    by 0x4AB0C0: ??? (in /usr/bin/python2.7)
==16220==    by 0x4AAFD6: ??? (in /usr/bin/python2.7)
==16220==    by 0x4AB0C0: ??? (in /usr/bin/python2.7)
==16220==    by 0x4AAFD6: ??? (in /usr/bin/python2.7)
==16220==    by 0x4AB0C0: ??? (in /usr/bin/python2.7)
==16220==    by 0x535AE2: PyMarshal_ReadLastObjectFromFile (in /usr/bin/python2.7)
==16220==    by 0x528178: ??? (in /usr/bin/python2.7)
==16220== 
==16220== LEAK SUMMARY:
==16220==    definitely lost: 456 bytes in 10 blocks
==16220==    indirectly lost: 284 bytes in 6 blocks
==16220==      possibly lost: 3,844,678 bytes in 1,533 blocks
==16220==    still reachable: 16,937,271 bytes in 9,558 blocks

それなし:

==16249== 3,145,728 bytes in 1 blocks are possibly lost in loss record 2,721 of 2,721
==16249==    at 0x4C28BED: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16249==    by 0x463DA4: ??? (in /usr/bin/python2.7)
==16249==    by 0x4A1BB1: PyString_InternInPlace (in /usr/bin/python2.7)
==16249==    by 0x4AAED0: ??? (in /usr/bin/python2.7)
==16249==    by 0x4AAFD6: ??? (in /usr/bin/python2.7)
==16249==    by 0x4AB0C0: ??? (in /usr/bin/python2.7)
==16249==    by 0x4AAFD6: ??? (in /usr/bin/python2.7)
==16249==    by 0x4AB0C0: ??? (in /usr/bin/python2.7)
==16249==    by 0x4AAFD6: ??? (in /usr/bin/python2.7)
==16249==    by 0x4AB0C0: ??? (in /usr/bin/python2.7)
==16249==    by 0x535AE2: PyMarshal_ReadLastObjectFromFile (in /usr/bin/python2.7)
==16249==    by 0x528178: ??? (in /usr/bin/python2.7)
==16249== 
==16249== LEAK SUMMARY:
==16249==    definitely lost: 456 bytes in 10 blocks
==16249==    indirectly lost: 284 bytes in 6 blocks
==16249==      possibly lost: 3,844,822 bytes in 1,534 blocks
==16249==    still reachable: 16,938,119 bytes in 9,558 blocks

valgrind --tool=massif を使用すると、メモリ使用量が増加します ( PDF については、このリンクを参照してください)

4

1 に答える 1