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

2010-12-02 23:46:44 +08:00
 darasion
如题,怎么看呢?

刚刚 Twitdao 的:
http://img.ly/2xX9
4701 次点击
所在节点    Google App Engine
12 条回复
keakon
2010-12-03 01:43:36 +08:00
latency越低越好(一般应该低于1000ms,我的不到100ms),QPS越高越好(不过钱也花得多)
darasion
2010-12-03 11:38:56 +08:00
@keakon 谢。昨天慢的要死,以为什么毛病。

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

像 twitter 客户端这样的东西,是不是都在 urlfetch 这里?
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
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
2010-12-03 15:15:46 +08:00
我也不是很懂,但是某些语句会log出,xxx will create new instance之类的,设想一下,如果你只能有一个或者两个instance同时存在的限制,可能就有阻塞导致响应的延迟?瞎猜啦。
darasion
2010-12-04 09:18:37 +08:00
@keakon 这个hook怎么用?写完直接扔进目录就能用吗?

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

昨天试了一下,发觉一点反应都没有。
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
2010-12-04 12:24:55 +08:00
@keakon 哇哦,谢。我试试去。
darasion
2010-12-04 21:56:48 +08:00
@keakon 试了,还是不行,好像只log了2次。
我刷新了N次,不应该只有这么两次吧?
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
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 里边就找不到,或者找到很少。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/5316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX