it-source

권장되는 Python 메모리 프로파일러는 무엇입니까?

criticalcode 2023. 1. 3. 21:45
반응형

권장되는 Python 메모리 프로파일러는 무엇입니까?

Python 어플리케이션의 메모리 사용량, 특히 어떤 코드 블록/포트 또는 객체가 메모리를 가장 많이 사용하는지 알고 싶습니다.Google 검색 결과 상용 제품은 Python Memory Validator(Windows 전용)입니다.

오픈 소스 제품은 PySizerHeatapy입니다.

다른 사람을 시험해 본 적이 없기 때문에 다음 사항을 고려했을 때 어떤 것이 가장 좋은지 알고 싶었습니다.

  1. 대부분의 세부사항을 제공합니다.

  2. 코드를 최소한으로 변경해야 합니다.

memory_profiler 모듈은 메모리 사용 현황 보고서를 한 줄 한 줄 인쇄할 수 있으며 UNIX 및 Windows에서 작동합니다(마지막에는 psutil 필요).출력은 그다지 상세하지 않지만, 목표는 할당된 개체에 대한 완전한 분석이 아니라 코드가 메모리를 더 많이 소비하는 부분을 개략적으로 설명하는 것입니다.

당신의 기능을 장식한 후@profile를 사용하여 코드를 실행합니다.-m memory_profiler플래그를 지정하면 다음과 같이 한 줄 한 줄 보고서가 인쇄됩니다.

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

guppy3는 사용하기 매우 간단합니다.코드의 어느 시점에서, 다음과 같이 기술할 필요가 있습니다.

from guppy import hpy
h = hpy()
print(h.heap())

이것은 다음과 같은 출력을 제공합니다.

Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
0  35144  27  2140412  26   2140412  26 str
1  38397  29  1309020  16   3449432  42 tuple
2    530   0   739856   9   4189288  50 dict (no owner)

오브젝트가 참조되고 있는 장소를 특정해, 거기에 관한 통계 정보를 취득할 수도 있습니다만, 그 문서는 다소 희박합니다.

Tk로 작성된 그래피컬 브라우저도 있습니다.

Python 2.x의 경우 Heatapy를 사용합니다.

다우저를 추천합니다.셋업은 매우 간단하며 코드를 변경할 필요가 없습니다.간단한 웹 인터페이스에서 시간별 유형별 개체 수 보기, 활성 개체 목록 보기, 활성 개체에 대한 참조 보기 등을 모두 볼 수 있습니다.

# memdebug.py

import cherrypy
import dowser

def start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port
    })
    cherrypy.server.quickstart()
    cherrypy.engine.start(blocking=False)

memdebug를 Import하고 memdebug.start를 호출합니다.그게 다예요.

PySizer나 Heapy는 먹어본 적이 없어요.다른 사람의 리뷰에 감사드립니다.

갱신하다

는 ★★★★★★★★★★★★★★★★★★★★.CherryPy 2.X,CherryPy 3.Xserver.quickstart되어 있습니다.engine.start는, 「」를 .blocking플래그를 사용합니다.CherryPy 3.X

# memdebug.py

import cherrypy
import dowser

def start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port
    })
    cherrypy.engine.start()

objgraph 라이브러리를 고려해 보십시오(사용 예시는 이 블로그 게시물을 참조하십시오).

Mupy는 Python용 메모리 사용량 프로파일러입니다.이 툴 세트의 초점은 메모리 누전 식별에 있습니다.

Muppy는 개발자들이 Python 애플리케이션의 메모리 누수를 식별할 수 있도록 돕습니다.런타임 중 메모리 사용량을 추적하고 누출되는 개체를 식별할 수 있습니다.또한 릴리스되지 않은 객체의 소스를 찾을 수 있는 도구도 제공됩니다.

저는 memprof라는 Python용 메모리 프로파일러를 개발하고 있습니다.

http://jmdana.github.io/memprof/

이를 통해 장식된 메서드를 실행하는 동안 변수의 메모리 사용량을 기록하고 플롯할 수 있습니다.다음을 사용하여 라이브러리를 Import하면 됩니다.

from memprof import memprof

그리고 다음 방법으로 메서드를 꾸밉니다.

@memprof

다음 예에서는 플롯의 모양을 보여 줍니다.

여기에 이미지 설명 입력

이 프로젝트는 GitHub:

https://github.com/jmdana/memprof

는 멜리아에가 Heaty나 PySizer보다 훨씬 더 기능적이라는 것을 알았다.만약 당신이 wsgi 웹 앱을 실행하고 있다면, Dozer는 Dowser의 훌륭한 미들웨어 래퍼입니다.

Python 회선 번호당 메모리 사용량을 제공하는 pytracemalloc 프로젝트도 시도해 보십시오.

편집 (2014/04) :스냅숏을 분석하기 위한 Qt GUI가 추가되었습니다.

언급URL : https://stackoverflow.com/questions/110259/which-python-memory-profiler-is-recommended

반응형