问题标签 [appstats]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
639 浏览

java - Google App Engine 奇怪的延迟

我改进了很多代码,现在所有的 API 都运行得非常快,我还添加了 memcache,我的命中率很高。但有时我会遇到毫无意义的延迟。

我在这里附上了最重要的 appstats 屏幕截图:运行 90 毫秒的 RPC 总共需要超过 20 秒;这怎么可能?我应该在哪里寻找这些延误的根源?

我真的被卡住了,因为我不明白 RPC 之间发生了什么,而且我不知道我还能做些什么来获取更多信息。

只是一个想法:每个 HTTP 调用都由同一个 GAE 实例处理,对吧?因为我的实例花了很多时间来预热..但我不认为这是相关的

顺便说一句:我正在用 Java 编码。

appstats 统计

0 投票
1 回答
1028 浏览

java - 如何减少 Google App Engine Java 上 Appstats 的内存使用量

这与问题Java Appengine APPSTATS 导致 java out of memory 错误有关

Appstats 似乎在 128MB 实例上导致 java.lang.OutOfMemoryError,我想知道是否有办法减少日志记录量。有没有办法从堆栈跟踪中过滤一些包名?

GAE API:

我的应用程序 API:

无关:

这是可能由堆栈跟踪 OutOfMemoryError 引起的堆栈跟踪:

对于 Google 工程师,这是指向这些错误的链接

0 投票
2 回答
133 浏览

java - 如何在 App Engine 生产环境中调试执行暂停?

在查看我的 Google App Engine/Java 应用程序的 Appstats 图表时,我有时会看到 RPC 之间似乎无法解释的时间间隔。在随附的屏幕截图中,从 for 循环对 MemcacheService.get 的两次调用之间有将近 2 秒的间隔。当我在本地运行代码时,不会出现此行为。当我的代码在 App Engine 云中运行时,如何调查此类异常的原因?

显然SO不会让我发布图片,所以这里有一个图表链接:http: //i.imgur.com/bbCXr.jpg

0 投票
1 回答
279 浏览

google-app-engine - 将 GAE 上的 AppStats 与 NDB 一起使用,我如何知道正在执行什么查询?

我正在查看 RPC 调用,但堆栈都是 tasklet 和 ndb。这让我很难判断正在运行哪些查询。是否有我需要使用的 appstats 配置设置?

谢谢您的帮助。

0 投票
1 回答
198 浏览

google-app-engine - 协调 appstats Grand Total 和 apache bench 之间的差异

我一直在使用 appstats 来检查一些调用。我有一个简单的视图,可以调用 memcache 并返回结果。Appstats 告诉我总时间(总计)约为 15 毫秒。但是,我在浏览器中观察到的更像是 242 毫秒左右。实际上,我使用 apache bench 也得到了相同的结果。我尝试了另一个网络(使用 ec2 实例),看看我是否会看到不同的往返时间并得到大致相同的结果。对服务器的 ping 大约需要 13 或 14 毫秒。

我肯定在这里遗漏了一些东西。我无法解释大约 180-200 毫秒的延迟。根据使用应用程序引擎和应用程序统计的经验,我希望有人可以帮助我睁开眼睛了解我所缺少的东西。

如果有兴趣,请提供一些环境细节...... python 2.7; 在测试中同时使用了 webapp2 和 Flask;我的 apache bench 测试都是单线程的 100 次。

感谢您的任何见解。

0 投票
1 回答
723 浏览

python - 调用 get_multi 时如何防止应用程序调用 datastore_v3.next()?

我正在运行一个 keys_only 查询,它获取 20 个结果。

然后我得到activityIndex对象的父母:

我认为这会很快,因为我正在按键获取一批对象。但是,查询似乎 call datastore_v3.Next,根据appstats 文档,它是“坏的”,并且占用了很大一部分执行时间。

避免不必要的 Next 调用可能会加快您的应用程序!

上述查询的 Appstats(使用 get_multi 调用) 启用 get_multi 的 Appstats 视图

上述查询的 Appstats 但没有调用 get_multi(next() 响应时间短)。 下一个响应的时间很短

为什么datastore_v3.next()调用时调用需要这么长时间才能执行get_multi()?它是否取决于 get_multi 将返回的结果数量?get_multi 中返回的一些对象具有列表属性(列表中最多 10 个项目),这会对性能产生影响吗?

为避免此问题,是否最好更改设计并在 tasklet 中获取所需的实体?还有其他建议吗?

编辑:

关于我正在尝试做的更多信息:我的应用程序中有一个活动流,它显示所有用户活动,例如 Rob 对 Picture 等的评论。要显示此信息,我认为我需要 User 对象和 Picture对象来建立活动描述和要显示的信息。我将所有这些对象的键设置为ActivityIndex. 因此,从上面的查询中,ndb.get_mult(keys)将获取 Activity、User 和 Picture 对象。键列表可能包含 50 个或更多键,因此这可能是导致长时间datastore_v3.Next调用的原因。

0 投票
1 回答
155 浏览

java - 当以下代码包含在事务中时,为什么应用引擎会减少我的费用?

我已经使用 appstats 多次验证了这一点。当以下代码未包装在事务中时,JDO 执行两次数据存储读取和一次写入,3 次 RPC,成本为 240。不仅仅是第一次,每次,即使它每次都访问相同的记录,因此应该将其从缓存中拉出。但是,当我将代码包装在上面的事务中时,代码会生成 4 个 RPC:开始事务、获取、放置和提交——其中,只有获取被计费为数据存储读取,因此总成本为 70。

如果它从缓存中提取它,为什么它只会为读取计费?似乎它会为写入而不是读取计费。应用引擎对非事务性缓存读取的收费是否与对数据存储读取的收费相同?为什么?

这是带有事务的代码:

这是没有交易的代码:

0 投票
2 回答
615 浏览

google-app-engine - 如何让 appstats 与 GAE 上的 webapp2 和扩展路由一起使用?

我正在尝试让 Appstats 在我的 GAE Python 应用程序上工作。我将 webapp2 与 python 2.7 一起使用。

我已按照https://developers.google.com/appengine/docs/python/tools/appstats#Setup的说明进行操作,其中包括创建 appengine_config.py 文件:

并将以下几行添加到我的 app.yaml 中:

我希望在其上使用 Appstats 的 python 应用程序如下所示:

import appengine_config(我在阅读 Appstats 的评论后尝试了仅适用于一个 WSGIApplication但这也不起作用)

我面临的问题是我可以看到 appstats 控制台,/_ah/stats但即使在向应用程序发出许多请求后它也没有记录任何内容。

我想知道这是否与我使用扩展 URL 路由的事实有关?我真的很想使用 webapps2 扩展路由,所以我希望 Appstats 没有问题。如果有人对我做错了什么有任何见解,那真的会有所帮助!

提前感谢负载!

0 投票
1 回答
165 浏览

google-app-engine - NDB tasklet 在 appstats 中不可见

为什么appstats@ndb.tasklet中没有装饰方法的行号?

在我们的应用程序中,我们有一个约定,包括同步和异步版本的函数,例如:

…但是即使在设置appegnine_config.appstats_MAX_STACK为巨大的东西并清空appengine_config.appstats_RE_STACK_SKIP之后,appstats 中的报告仍然会在第一次some_tasklet.get_result()调用时留下我的应用程序代码。

这是来自 appstats 的示例:

截屏

扩展的堆栈框架learn.get_list_of_cards_to_learn()只是简单地返回self.get_list_of_cards_to_learn_async().get_result(),这是一个 tasklet,它反过来又调用了一堆其他的 tasklet。然而,这些小任务在 appstats 中都不可见,我所看到的只是ndb内部。

我不确定ndb这些装饰器到底是如何执行的,但是如果我pdb在其中一个中添加跟踪并运行我的测试套件,我可以看到堆栈帧一直到pdb我放入 tasklet 的行,所以我不'不明白为什么appstats中没有。

一些请求会导致大量的 RPC 调用,但我不确定如何确定我的应用程序的哪个部分正在生成它们,因为我无法通过 appstats 中的第一个 tasklet 跟踪它。

有什么可能我需要微调的appengine_config吗?

0 投票
1 回答
79 浏览

google-app-engine - 有没有办法查看 Appstats 中正在访问哪些实体?

在分析datastore_v3.Get调用的 Appstats 跟踪时,了解正在从数据存储中检索哪些实体会非常有帮助。是否有启用此功能的隐藏配置标志?

我尝试设置appstats_DATASTORE_DETAILSTruein appengine_config.py,但似乎没有任何区别。