2014-04-21 3 views
0

Dowser 사용법에 대해 하나의 질문이 있습니다. CherryPy를 기반으로 웹 사이트를 만들었습니다. 메모리 누수가 있지만 어디 있는지 알 수 없습니다. 내 문제에 대한 정보를 검색 한 후 dowser는 메모리 누수가 발생하는 곳을 알 수있는 훌륭한 도구라는 것을 이해했습니다.Dowser로 CherryPy 응용 프로그램 프로파일 링

그래서 usage tutorial에는 기존 CherryPy 앱에 dowser를 통합하는 데 도움이되는 몇 가지 단계가 있지만 메모리 사용 결과는 어디에서 볼 수 있습니까? 추적 및 차트 변수를 어떻게 사용해야합니까?

감사합니다.

+0

링크 된 자습서에서/dowser,/trace 및/chart를 앱에 마운트하는 것처럼 보입니다. 브라우저에서 아직이 URL을 방문 했습니까? – elarson

답변

0

아니요. dowser 앱을 CherryPy 트리에 올바르게 장착 한 경우 tracechart을 터치하지 않아야합니다. 그것은 다음과 같은 것일 수 있습니다. 실행하고 잠시 기다렸다가 누수를 찾으면됩니다 (psst, 인스턴스 카운트 차트 참조).

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 


import os 
import threading 
import time 

import cherrypy 
import dowser 


config = { 
    'global' : { 
    'server.socket_host' : '127.0.0.1', 
    'server.socket_port' : 8080, 
    'server.thread_pool' : 4 
    } 
} 


class DowserToShow: 
    pass 


class App: 

    issueIsMe = [] 
    exited = False 
    thread = None 


    def __init__(self): 
    self.thread = threading.Thread(target = self.leak) 
    self.thread.start() 

    cherrypy.engine.subscribe('exit', self.exit) 

    def exit(self): 
    self.exited = True 
    self.thread.join() 

    def leak(self): 
    while not self.exited: 
     for i in range(100): 
     self.issueIsMe.append(DowserToShow()) 
     time.sleep(1) 

    @cherrypy.expose 
    def index(self): 
    return 'Leaked instances, {0}'.format(len(self.issueIsMe)) 


if __name__ == '__main__': 
    cherrypy.tree.mount(dowser.Root(), '/dowser') 
    cherrypy.quickstart(App(), '/', config) 
관련 문제