권장되는 Python 메모리 프로파일러는 무엇입니까?
Python 어플리케이션의 메모리 사용량, 특히 어떤 코드 블록/포트 또는 객체가 메모리를 가장 많이 사용하는지 알고 싶습니다.Google 검색 결과 상용 제품은 Python Memory Validator(Windows 전용)입니다.
오픈 소스 제품은 PySizer와 Heatapy입니다.
다른 사람을 시험해 본 적이 없기 때문에 다음 사항을 고려했을 때 어떤 것이 가장 좋은지 알고 싶었습니다.
대부분의 세부사항을 제공합니다.
코드를 최소한으로 변경해야 합니다.
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.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 라이브러리를 고려해 보십시오(사용 예시는 이 블로그 게시물을 참조하십시오).
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
'it-source' 카테고리의 다른 글
manjaro에서 mariaDB를 시작할 수 없습니다. (0) | 2023.01.03 |
---|---|
MySQL CASE 구조 (0) | 2023.01.03 |
어레이 값이 존재하는지 확인하는 방법 (0) | 2023.01.03 |
온클릭 이벤트에서 여러 JavaScript 함수를 호출하려면 어떻게 해야 합니까? (0) | 2023.01.03 |
Vuetify에서 프리펜드 아이콘으로 정의된 아이콘 스타일링 (0) | 2023.01.03 |