python debug查看進程和線程掛死問題和內存泄漏


1、python 調試工具 pyrasite 可以附加到python進程中,在這個進程中打開一個python 命令行。然后再這個里面執行代碼。

(對於這種掛死問題通常是由於多進程和多線程混用導致的,多線程中如果有鎖,在使用fork創建多進程的過程中fork出來的進程是單線程執行的,只會復制內存中的對象當前的信息,如果有一把鎖被別的線程獲取到,我們當前fork出的進程中的這個線程中,這把鎖的狀態只會是鎖定狀態,會導致子進程中再使用這個鎖的時候會導致死鎖。)

2、對於python進程中的掛死問題,我們需要對於進程中所有的線程查看它們卡死在了哪一個位置。

當我們進入這個進程中后,我們可以執行下面的代碼查看進程的幀棧。

import sys
for threadid,stack in sys._current_frame().items():
    print(threadid,stack)

3、對於內存泄漏問題,我們可以使用objgraph來查看內存泄漏,對於python  代碼造成的內存泄漏,我們可以很容易得看出來泄漏對象的引用關系。

但是對於C代碼造成的泄漏,我們通常只能看出對象類型來,並不能看出泄漏對象的引用關系。所以還要一步一步排除。

4 py-spy 也可以看出進程是否掛死


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM