我试图了解我可以在AppEngine中减少一些特定请求的时间(数百万用户将会制作)。
以下是来自appengine.com实例(不是我的本地开发服务器)的RPC时序。
Gannt图表显示处理程序中的3个RPC调用每个最多花费25毫秒:
但两者之间存在巨大差距。
所以我在每个RPC周围添加了一些日志消息,例如:
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 ms,282 ms,616 ms。
我的猜测是图表时序不考虑反序列化到模型对象中,或类似的东西?
根据Datastore Admin,平均值。从第二次和第三次调用返回的实体的实体大小分别为5KB和1KB。
此外,该图表显示第一个RPC在第一个RPC开始后约600毫秒,而日志显示在1和1之间仅经过约300毫秒。 3。
我不应该依赖图表/统计数据来获得硬/实数吗?
答案 0 :(得分:2)
我的猜测是图表时序不考虑反序列化 进入模型对象,或类似的东西?
是的 - 他们只对
此外,该图表显示第一个RPC开始后约600毫秒, 而日志显示在1和1之间仅经过约300毫秒。 3。
这 令人困惑 - 我有时会看到相反的情况(并且精神上将其归因于应用程序或线程被抢占而且图表仅考虑" CPU&#34 ;而不是'#34;总逝去时间',但从来没有你观察到的那种差异。
我不应该依赖图表/统计数据来获得硬/实数吗?
我最近开始使用Google Cloud Monitoring(来自Stackdriver),按照https://cloud.google.com/monitoring/get-started#monitoring_app_engine_projects开始播放("播放"仅限测试阶段),我想知道如果它可以为你做得更好......