在google的appengine上分析/优化网站的最佳方式

时间:2009-03-24 23:27:38

标签: python google-app-engine

我目前正在尝试优化我的网站,该网站运行在google的appengine上。这不是一件容易的事,因为我没有使用任何强大的工具。

有没有人有为此目的优化python代码的经验? 你有没有找到一个好的python profiler?

4 个答案:

答案 0 :(得分:13)

我发现Gprof2Dot非常有用。我尝试过的分析模块的输出非常不直观。

Gprof2Dot将cProfile输出转换为漂亮的图形,突出显示最慢的链(?),以及每个函数的一些信息(函数名称,此函数花费的时间百分比和调用次数)。 / p>

An example graph (1429x1896px)

我没有对App Engine做太多工作,但在分析非webapp脚本时,我倾向于分析运行所有单元测试的脚本,这可能对现实情况不太准确

一个(更好的?)方法是使用一个执行虚假WSGI请求的脚本,然后对其进行概要分析。

WSGI是一个非常简单的协议,它基本上是一个带有两个参数的函数,一个带有请求信息,另一个带有回调函数(用于设置头文件等)。也许类似于以下内容(这是可能的工作伪代码)......

class IndexHandler(webapp.RequestHandler):
    """Your site"""
    def get(self):
        self.response.out.write("hi")

if __name__ == '__main__':
    application = webapp.WSGIApplication([
        ('.*', IndexHandler),
    ], debug=True)

    # Start fake-request/profiling bit
    urls = [
        "/",
        "/blog/view/hello",
        "/admin/post/edit/hello",
        "/makeanerror404",
        "/makeanerror500"
    ]

    def fake_wsgi_callback(response, headers):
        """Prints heads to stdout"""
        print("\n".join(["%s: %s" % (n, v) for n, v in headers]))
        print("\n")

    for request_url in urls:
        html = application({
        'REQUEST_METHOD': 'GET',
        'PATH_INFO': request_url},
        fake_wsgi_callback
        )
        print html

实际上,App Engine文档解释了一种更好的分析应用程序的方法:

来自http://code.google.com/appengine/kb/commontasks.html#profiling

  

要分析应用程序的性能,请先将应用程序的main()功能重命名为real_main()。然后,向您的应用程序添加一个新的main函数,名为profile_main(),如下所示:

def profile_main():
    # This is the main function for profiling 
    # We've renamed our original main() above to real_main()
    import cProfile, pstats
    prof = cProfile.Profile()
    prof = prof.runctx("real_main()", globals(), locals())
    print "<pre>"
    stats = pstats.Stats(prof)
    stats.sort_stats("time")  # Or cumulative
    stats.print_stats(80)  # 80 = how many to print
    # The rest is optional.
    # stats.print_callees()
    # stats.print_callers()
    print "</pre>"
     

[...]

     

要使用您的应用程序启用分析,请设置main = profile_main。要正常运行您的应用程序,只需设置main = real_main

答案 1 :(得分:8)

App Engine Mini Profiler是一个新的嵌入式应用引擎性能工具,它为所有函数调用提供API调用性能信息(通过Appstats)和标准性能分析数据(通过cProfiler)

https://github.com/kamens/gae_mini_profiler

答案 2 :(得分:3)

为了分析API调用,Guido van Rossum发布了一个名为Appstats的库,它将记录并显示有关您应用的许多好东西。

您可以在此处获取图书馆:https://sites.google.com/site/appengineappstats/

我在我的博客上写了一篇关于它的文章(有一些截图):http://blog.dantup.com/2010/01/profiling-google-app-engine-with-appstats

Appstats http://blog.dantup.com/pi/appstats_4_thumb.png

答案 3 :(得分:1)

python网站列出了3个可供选择的分析器:http://docs.python.org/library/profile.html