3

私は自分の CherryPy Web サーバーのプロファイリングを開始しようとしていますが、これをどのようにセットアップする必要があるかについての詳細なドキュメントが不足しています。cherrypy.lib.profiler最初のサーバーをマウントするためのミドルウェアとして使用できるはずであることを理解しています。現在、次のようなコードがあります。

server_app = ServerClass()
cherrypy.tree.mount(server_app, '/', '/path/to/config/file.cfg')
cherrypy.engine.start()
cherrypy.engine.block()

プロファイリングミドルウェアをマウントしたいのですが、以下のようなものが必要なようです。

from cherrypy.lib import profiler

server_app = ServerClass()
server_cpapp = cherrypy.Application(server_app, '/', '/path/to/config/file.cfg')
server_profile_cpapp = profiler.make_app(server_cpapp, '/home/ken/tmp/cprofile', True)
#cherrypy.tree.mount(server_profile_cpapp)
cherrypy.tree.graft(server_profile_cpapp)

cherrypy.engine.start()
cherrypy.engine.block()

なんらかの理由cherrypy.tree.mountで動作しませんが、使用するcherrypy.tree.graftとすべて正常に動作するようです (通常どおりサーバーに要求を行うことができます)

ただし、上記のコードはcp_0001.prof下にファイルを生成し、/home/ken/tmp/cprofileそれを解釈する方法がわかりません。pyprof2calltreeデータを KCacheGrind に読み込むために使用しようとしましたが、解析エラーが発生します。私がやっていることは正しいように見えますか? もしそうなら、出力ファイルをどのように解釈すればよいですか?

4

2 に答える 2

1

また、cherrypy インスタンスのプロファイリングを実行しようとしています。最初の質問と同じコードを使用しました。これは、フォルダーに cp_0001.prof ファイルを生成するという点で機能しているようです。

あなたの質問に答えるために、runsnakerrun でこのファイルを開いて、プロファイリングの出力をツリー ビューで見ることができます。

私が抱えている問題は、サーバーに対して行うすべてのリクエストが失敗し、ログに次の出力が記録されることです。

[29/May/2013:16:39:32] ENGINE AssertionError('Bad call', ('', 0, 'sleep'), <frame object at 0x08522400>, <frame object at 0x08522030>, <frame object at 0x08156748>, <frame object at 0x06D06F10>)
Traceback (most recent call last):
  File "<path>\packages\cherrypy\wsgiserver\wsgiserver2.py", line 1302, in communicate
    req.respond()
  File "<path>\packages\cherrypy\wsgiserver\wsgiserver2.py", line 831, in respond
    self.server.gateway(self).respond()
  File "<path>\packages\cherrypy\wsgiserver\wsgiserver2.py", line 2115, in respond
    response = self.req.server.wsgi_app(self.env, self.start_response)
  File "<path>\packages\cherrypy\_cptree.py", line 290, in __call__
    return app(environ, start_response)
  File "<path>\packages\cherrypy\lib\profiler.py", line 188, in __call__
    return self.profiler.run(gather)
  File "<path>\packages\cherrypy\lib\profiler.py", line 147, in run
    result = self.profiler.runcall(func, *args)
  File "<path>\python\lib\profile.py", line 472, in runcall
    return func(*args, **kw)
  File "<path>\packages\cherrypy\lib\profiler.py", line 183, in gather
    def gather():
  File "<path>\python\lib\profile.py", line 246, in trace_dispatch_i
    if self.dispatch[event](self, frame, t):
  File "<path>\python\lib\profile.py", line 301, in trace_dispatch_call
     frame, frame.f_back)
AssertionError: ('Bad call', ('', 0, 'sleep'), <frame object at 0x08522400>, <frame object at 0x08522030>, <frame object at 0x08156748>, <frame object at 0x06D06F10>)

私はpython 2.6.6とcherrypy 3.2.2を使用しています

助言がありますか?

于 2013-05-29T15:00:04.920 に答える