[python] 어떤 Python 메모리 프로파일 러가 권장됩니까? [닫은]

파이썬 응용 프로그램의 메모리 사용량을 알고 싶습니다. 특히 대부분의 메모리를 소비하는 코드 블록 / 부분 또는 객체가 무엇인지 알고 싶습니다. 구글 검색에 따르면 상용 제품은 Python Memory Validator (Windows 만 해당)입니다.

오픈 소스는 PySizerHeapy 입니다.

나는 아무도 시도하지 않았으므로 가장 고려할 사항을 알고 싶었습니다.

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

  2. 코드를 최소한으로 변경하거나 변경하지 않아야합니다.



답변

Heapy 는 사용하기가 매우 쉽습니다 . 코드의 어느 시점에서 다음을 작성해야합니다.

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로 작성된 그래픽 브라우저도 있습니다.


답변

아무도 언급하지 않았으므로 내 모듈 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


답변

다우 저를 추천 합니다. 설정이 매우 쉽고 코드를 전혀 변경하지 않아도됩니다. 간단한 웹 인터페이스에서 시간을 통해 각 유형의 개체 수를보고, 라이브 개체 목록을보고, 라이브 개체에 대한 참조를 볼 수 있습니다.

# 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를 가져오고 memdebug.start를 호출하십시오. 그게 다야.

PySizer 또는 Heapy를 시도하지 않았습니다. 다른 사람들의 리뷰에 감사드립니다.

최신 정보

위의 코드입니다 CherryPy 2.X, 방법은 제거하고 하지 않습니다 플래그. 그래서 당신이 사용하는 경우CherryPy 3.Xserver.quickstartengine.startblockingCherryPy 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 라이브러리를 고려하십시오 (참조사용 사례의 예는 http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks ).


답변

머피 는 파이썬 용 메모리 사용 프로파일 러입니다. 이 도구 세트는 메모리 누수 식별에 중점을 둡니다.

Muppy는 개발자가 Python 응용 프로그램의 메모리 누수를 식별하도록 도와줍니다. 런타임 동안 메모리 사용을 추적하고 누수되는 객체를 식별 할 수 있습니다. 또한 릴리스되지 않은 객체의 소스를 찾을 수있는 도구가 제공됩니다.


답변

memprof라는 Python 용 메모리 프로파일 러를 개발 중입니다.

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

데코 레이팅 된 메소드를 실행하는 동안 변수의 메모리 사용량을 기록하고 플로팅 할 수 있습니다. 다음을 사용하여 라이브러리를 가져와야합니다.

from memprof import memprof

다음을 사용하여 메소드를 장식하십시오.

@memprof

이것은 플롯이 어떻게 보이는지에 대한 예입니다.

여기에 이미지 설명을 입력하십시오

이 프로젝트는 GitHub에서 호스팅됩니다 :

https://github.com/jmdana/memprof


답변

나는 멜리아 가 Heapy 나 PySizer보다 훨씬 더 기능적이라는 것을 알았다. wsgi webapp을 실행하는 경우 Dozer 는 Dowser의 멋진 미들웨어 래퍼입니다.