簡體   English   中英

配置文件 Memory 使用正在運行的 Python 進程

[英]Profile Memory Usage of a running Python Process

我有一個 Python 進程在很長一段時間(至少 10 小時,有時更多)后開始泄漏 memory。 這個問題很難重現,因此我想在問題出現時附加到正在運行的 Python 解釋器上,並以某種方式檢查 memory 的使用情況,例如通過獲取當前分配最多 ZCD69B4957F06CD81917BFDED 的對象列表。

這對於像tracemallocmemory-profiler這樣的常用分析工具來說是困難的,因為它們需要成為代碼的一部分或與進程一起啟動,並且它們對運行時性能有重大影響。

我想要的是一個采樣分析器,我可以簡單地將它附加到現有的 Python 進程(如py-spy ),但 py-spy 只能讓我了解在函數中花費的 CPU 時間,而不是 memory 使用情況。

是否有其他工具或不同的方法可以幫助我深入了解現有 Python 進程的 memory 使用情況?

編輯:我剛剛找到pyrasite ,它提供了pyrasite-memory-viewer命令,這正是我正在尋找的,但不幸的是,該項目似乎已被放棄,我無法讓它在 Python 3.8 上運行。

只要您可以在 Linux 上運行您的應用程序, https://github.com/vmware/chap (開源代碼)就可以滿足您的要求。

  1. 等到您認為您對應用程序在該時間點的分配感興趣。

  2. 為您的進程收集一個實時核心(例如使用 gcore),但請確保首先設置 coredump 過濾器,如下所示:

    echo 0x37 >/proc/ pid-of-your-python-program /coredump_filter

    gcore pid-of-your-python-program

  3. 在章節中打開生成的核心。

  4. 在章節提示符下執行以下操作:

    重定向

    描述使用

  5. 使用選擇的工具編輯生成的文件或對其進行后處理。

您可以從 chap 中使用其他命令來了解為什么錨定您感興趣的任何分配,主要是因為它們允許您通過傳入的引用向后遍歷,但以上內容應該足以讓您找出哪些類型的分配具有高計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM