Google app engine _ah/stats中的RPC计时是否遗漏了什么?
我正在努力理解,在AppEngine中,我可以在哪里为一个特定的请求节省一些时间(将有数百万用户提出请求) 以下是我从appengine.com实例(不是我的本地开发服务器)获得的RPC计时 Gannt图表显示处理程序中的3个RPC调用每次最多花费25毫秒: 但两者之间存在巨大差距 因此,我在每个RPC周围添加了一些日志消息,如:Google app engine _ah/stats中的RPC计时是否遗漏了什么?,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,我正在努力理解,在AppEngine中,我可以在哪里为一个特定的请求节省一些时间(将有数百万用户提出请求) 以下是我从appengine.com实例(不是我的本地开发服务器)获得的RPC计时 Gannt图表显示处理程序中的3个RPC调用每次最多花费25毫秒: 但两者之间存在巨大差距 因此,我在每个RPC周围添加了一些日志消息,如: logging.debug('Starting 1st RPC') tags = ndb.get_multi(tag_keys, use_cache=True, u
logging.debug('Starting 1st RPC')
tags = ndb.get_multi(tag_keys, use_cache=True, use_memcache=True)
logging.info('Finished 1st RPC, retrieved {} entities'.format(len(tags)))
上面绘制的请求日志为:
2015-04-03 16:33:16.870 /api/v2/foo 200 1229ms 103kb Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 module=default version=3
D 2015-04-03 16:33:15.650 Starting 1st RPC
I 2015-04-03 16:33:15.670 Finished 1st RPC, retrieved 3 entities
D 2015-04-03 16:33:15.671 Starting 2nd RPC
I 2015-04-03 16:33:15.953 Finished 2nd RPC, retrieved 30 entities
I 2015-04-03 16:33:15.957 ...
D 2015-04-03 16:33:15.958 Starting 3rd PRC
I 2015-04-03 16:33:16.574 Finished 3rd RPC, retrieved 190 entities
I 2015-04-03 16:33:16.652 ...
I 2015-04-03 16:33:16.761 ...
I 2015-04-03 16:33:16.843 Saved; key: __appstats__:095600, part: 90 bytes, full: 15711 bytes, overhead: 0.001 + 0.066; link: http://foo.appspot.com/_ah/stats/details?time=1
显示RPC计时为20毫秒、282毫秒、616毫秒
我的猜测是,图表计时没有考虑到模型对象的反序列化,或者类似的东西
根据Datastore Admin,第二次和第三次调用返回的实体的平均实体大小分别为5KB和1KB
此外,图表显示第三个RPC在第一个RPC开始后约600毫秒开始,而日志显示在1和3之间仅经过约300毫秒
我不应该依赖图表/统计数据来获取硬数据/真实数据吗
我的猜测是,图表计时不考虑反序列化
进入模型对象,或者类似的东西
对-他们只对RPC本身有严格的要求
此外,图表显示了第三次RPC在第一次之后约600毫秒开始,
而日志显示1和3之间仅经过约300毫秒
这个令人费解——我有时会看到相反的情况(我在心里把它归因于应用程序或线程被抢占,图表只考虑“CPU”而不是“总运行时间”),但从来没有看到过你观察到的那种差异
我不应该依赖图表/统计数据来获取硬数据/真实数据吗
我最近开始玩谷歌云监控(来自Stackdriver),per(“只玩”,因为它是beta版),我想知道它是否能为你做得更好