V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
darasion
V2EX  ›  Google App Engine

Instances 有啥用? 怎样才算是健康的?

  •  
  •   darasion · 2010-12-02 23:46:44 +08:00 · 4702 次点击
    这是一个创建于 5104 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,怎么看呢?

    刚刚 Twitdao 的:
    12 条回复    1970-01-01 08:00:00 +08:00
    keakon
        1
    keakon  
       2010-12-03 01:43:36 +08:00
    latency越低越好(一般应该低于1000ms,我的不到100ms),QPS越高越好(不过钱也花得多)
    darasion
        2
    darasion  
    OP
       2010-12-03 11:38:56 +08:00
    @keakon 谢。昨天慢的要死,以为什么毛病。

    然后发现今天出了新版sdk,我猜大概那时 GAE 在更新什么东西吧?
    darasion
        3
    darasion  
    OP
       2010-12-03 13:31:08 +08:00
    @keakon 那么怎样查找性能瓶颈在哪呢?

    像 twitter 客户端这样的东西,是不是都在 urlfetch 这里?
    keakon
        4
    keakon  
       2010-12-03 14:20:08 +08:00
    你可以用logging来记录时间,urlfetch属于service,可以参考这个来hook:
    https://bitbucket.org/keakon/doodle/src/9830de2a181b/hook.py

    twitter 客户端确实没什么办法加快,不过web端的可以弄成ajax,在用户不知情的情况下去fetch
    lepture
        5
    lepture  
       2010-12-03 14:28:04 +08:00
    @darasion
    try this: http://code.google.com/appengine/docs/python/tools/appstats.html

    Appstats will list the cost for every action
    saga
        6
    saga  
       2010-12-03 15:15:46 +08:00
    我也不是很懂,但是某些语句会log出,xxx will create new instance之类的,设想一下,如果你只能有一个或者两个instance同时存在的限制,可能就有阻塞导致响应的延迟?瞎猜啦。
    darasion
        7
    darasion  
    OP
       2010-12-04 09:18:37 +08:00
    @keakon 这个hook怎么用?写完直接扔进目录就能用吗?

    如果我要看urlfetch的情况。服务名称是'urlfetch'吗?

    昨天试了一下,发觉一点反应都没有。
    keakon
        8
    keakon  
       2010-12-04 12:21:58 +08:00
    要在main()里调用import hook并重设时间

    不过如果不记录urlfetch次数和总时间,那就不需要重设时间,只import即可

    https://bitbucket.org/keakon/doodle/src/86e5d334e718/blog.py#cl-64

    服务名是'urlfetch'
    darasion
        9
    darasion  
    OP
       2010-12-04 12:24:55 +08:00
    @keakon 哇哦,谢。我试试去。
    darasion
        10
    darasion  
    OP
       2010-12-04 21:56:48 +08:00
    @keakon 试了,还是不行,好像只log了2次。
    我刷新了N次,不应该只有这么两次吧?
    keakon
        11
    keakon  
       2010-12-05 02:05:58 +08:00
    这个和你的实现有关,你得了解什么是App Caching

    简单来说,你import hook后,只要这个instance没有消亡或清除App Caching,hook是可以重用而无需再次载入的

    而hook.py中又import了apiproxy_stub_map,并且hook了其中的服务,因此这个hook是持续存在的,直到instance消亡或清除App Caching

    此外main函数也是会被cache的,因此重用main函数时,它之外的语句不会重复执行

    如果你import的位置不对,就有可能造成多次hook,也有可能造成没有hook,我也不知道你代码是咋样的,只能点到此了
    darasion
        12
    darasion  
    OP
       2010-12-05 13:29:52 +08:00
    @keakon

    我就是学着doodle的样子。

    大概是这样:

    #一些 import ...
    import hook


    def main():
    hook.db_count = 0
    hook.db_time = 0
    hook.db_start_time = 0
    hook.request_arrive_time = time()
    application = webapp.WSGIApplication([
    #一些handler啥的
    ], debug=True)
    util.run_wsgi_app(application)


    if __name__ == '__main__':
    main()


    发现在本地测试的时候没问题。每次都会log出来,但是传上去之后。https://appengine.google.com/logs 里边就找不到,或者找到很少。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2097 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1915ms · UTC 00:40 · PVG 08:40 · LAX 16:40 · JFK 19:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.