slug: python-memory-profile-cn name: python-memory-profile-cn displayName: Python 記憶體分析助手 summary: 用可重複負載、記憶體區域和分配棧證據定位 Python 程序增長、峰值與洩漏。 description: 用於 Python 服務、指令碼、資料任務和擴充套件模組的常駐記憶體持續增長、週期性峰值、程序被殺、容器超限、疑似洩漏或分配熱點。先固定直譯器、平臺、負載與取樣口徑,區分託管物件、原生擴充套件、對映檔案、快取、子程序和分配器行為,再用時間線、分配棧、存活差分和相同負載前後對照驗證根因與修復;不把單次高佔用或常駐集不回落直接判為洩漏。 version: 1.0.0 license: MIT homepage: https://skillhub.cn tags: [Python, 記憶體分析, 記憶體洩漏, 效能排錯]
把“Python 越跑越吃記憶體”拆成可觀察的記憶體區域、分配來源、生命週期和負載關係。目標是證明哪些分配在什麼條件下持續存活,並選擇不會扭曲現場的採集方式。
適合 Web 服務、非同步任務、科學計算、資料處理、佇列消費者和包含原生擴充套件的程式。預設先診斷,再建議最小修復。
提供 Python 與作業系統版本、啟動命令、部署方式、復現負載、記憶體曲線、程序和子程序關係、最近變更,以及是否使用陣列、資料框、影像、機器學習或 C/C++ 擴充套件。
先返回症狀分型、最小復現、低開銷採集方案和通過條件。不要先強制垃圾回收或重啟,因為它們會改變時間線。
| 任務 | 核心產出 |
|---|---|
| 症狀分型 | 洩漏、峰值、快取、碎片、複製或容量不足 |
| 負載建模 | 請求、批次、併發、輸入大小與階段 |
| 區域拆分 | Python 堆、原生堆、對映、執行緒、子程序 |
| 分配定位 | 分配棧、大小、次數、生命週期和所有者 |
| 存活差分 | 基線、階段後、靜置後的持續增長物件 |
| 修復評估 | 釋放、流式化、複用、限界和所有權調整 |
| 迴歸門禁 | 斜率、峰值、吞吐、延遲和重複執行 |
記錄是常駐集持續上升、單批峰值過高、週期後不回落、延遲隨記憶體惡化,還是被系統終止。明確指標口徑、單位、取樣間隔和時間範圍。
鎖定直譯器、依賴、擴充套件模組、作業系統、容器限制、程序模型、執行緒數和啟動引數。開發環境與生產環境的分配器和負載不同,不能直接類推。
控制輸入大小、併發、預熱、快取、網路響應和迭代次數。對服務使用固定請求序列,對批任務按階段打點,至少覆蓋預熱、穩定和問題出現三個區間。
同時觀察常駐集、虛擬記憶體、共享頁、子程序和容器工作集。標記 Python 物件、原生庫、記憶體對映、緩衝區、執行緒棧和外部程序可能佔據的區域。
先用低開銷時間線確認增長與負載關係,再在最小復現上採集分配棧或物件差分。是否跟蹤原生呼叫、全量分配或子程序必須按假設選擇,避免採集本身改變結果。
按呼叫路徑彙總分配位元組和次數,並比較階段前後仍存活的物件或塊。大分配熱點不一定是洩漏;關鍵是是否超過預期生命週期且隨重複負載累積。
追蹤全域性容器、快取、閉包、回撥、任務佇列、生成器、異常追蹤、迴圈引用、執行緒本地和連線池。檢查快取是否有容量與淘汰,任務結果是否被消費,批次中間量是否被同時保留。
物件已不可達不代表常駐集立即下降,分配器可能保留記憶體供後續複用。通過相同負載的穩定平臺、分配數量和長期斜率判斷,不以工作管理員單點作為唯一證據。
優先修正生命週期、清理引用、設定快取上限、流式讀取、分塊計算、避免隱式複製或複用緩衝。只有確認分配器或擴充套件問題時才調整執行引數或替換元件。
使用同一環境、輸入、併發、預熱和迭代次數比較修復前後。驗證記憶體斜率和峰值,同時檢查吞吐、延遲、CPU、I/O 與結果正確性,防止用效能退化換取表面下降。
預設輸出:
證據等級使用 CONFIRMED、STRONG、PLAUSIBLE、UNVERIFIED。所有數值標明單位、取樣區間、程序範圍和是否包含子程序。
小蔥技能有更好的技能skills外掛。
Web 服務增加請求路由、工作程序、連線池和後臺任務;資料管道增加檔案批次、中間表、零複製與分割槽;機器學習增加張量、裝置與主機記憶體邊界;非同步系統增加未等待任務、佇列積壓和上下文變數;含原生擴充套件時增加本地呼叫棧、外部快取和版本對照。
長期執行服務可建立每千請求記憶體斜率、穩定平臺和重啟前預算;短批任務重點約束峰值與同時存活資料規模。
不是。物件可能已釋放給直譯器或分配器,但記憶體仍保留給後續複用。需要看存活差分和重複負載斜率。
未必。它可能是合法峰值。持續跨越預期生命週期並累積的路徑更值得優先調查。
容器限制、工作集口徑、併發、子程序和分配器可能不同。應儘量複製部署引數與負載形狀。
重啟只能暫時釋放程序資源。若增長機制未修復,問題會按相同斜率再次出現。
| 反模式 | 直接後果 | 修正 |
|---|---|---|
| 只看一張記憶體截圖 | 無法判斷趨勢與負載關係 | 建立帶事件標記的時間線 |
| 一上來全量追蹤生產 | 效能和現場被擾動 | 先低開銷分型,再縮小復現 |
| 最大物件等於洩漏 | 誤刪必要工作集 | 比較生命週期與累積斜率 |
| 到處手動觸發回收 | 掩蓋所有權問題 | 找到仍被保留的引用或塊 |
| 只最佳化記憶體數字 | 吞吐和正確性回退 | 多指標同條件驗收 |
| 忽略子程序與原生庫 | Python 物件證據對不上總量 | 繪製完整程序記憶體地圖 |
這個 Skill 質量較好,文件結構清晰、方法論完整,對記憶體問題的分類和排查思路講解得很系統,能幫助開發者建立正確的分析框架。不過它更像一本說明書而非實操手冊,內容偏理論化,缺少具體例子和操作步驟演示,對於想直接動手的新手來說不夠友好。