파이썬 응용 프로그램의 메모리 사용량을 알고 싶습니다. 특히 대부분의 메모리를 소비하는 코드 블록 / 부분 또는 객체가 무엇인지 알고 싶습니다. 구글 검색에 따르면 상용 제품은 Python Memory Validator (Windows 만 해당)입니다.
나는 아무도 시도하지 않았으므로 가장 고려할 사항을 알고 싶었습니다.
-
대부분의 세부 사항을 제공합니다.
-
코드를 최소한으로 변경하거나 변경하지 않아야합니다.
답변
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.X
server.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 라이브러리를 고려하십시오 (참조사용 사례의 예는 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에서 호스팅됩니다 :