如何减少谷歌应用引擎后端的日志服务 RPC

Posted

技术标签:

【中文标题】如何减少谷歌应用引擎后端的日志服务 RPC【英文标题】:How to reduce the logservice RPC's in google app engine backends 【发布时间】:2011-06-21 01:56:25 【问题描述】:

以上是对我的应用的单个 GET 请求的 appstats 图像,

此图显示单个日志服务 RPC 的 RPC 跟踪

loservice 调用的数量是否会对应用程序产生负面影响,对于 5 个 urlfetch RPC,在使用后端时大约有 80 个 logsservice RPC。我不知道这些 logservice rpc 调用的原因,我如何减少 logservice RPC 的数量,

在后端文档中,关于日志服务的文档有限

logservice.flush()

我如何控制后端的日志刷新,而不是随机的日志服务调用 谢谢

【问题讨论】:

这是刷新调用的完整堆栈跟踪吗?看起来不像。 @nick 是的,让我添加另一个屏幕截图来扩展所有调用 imgur.com/tQuB5imgur.com/0EaPk 另外,我如何配置 auto_flush。在前面的截图中,我没有在我的代码中摆弄日志服务。可能是通过配置 auto_flush 我可以减少调用?谢谢 你强调的差距是所有不是 RPC 调用的东西——简而言之,你的代码在做它所做的事情。稍后我会就日志服务设置与您联系。 【参考方案1】:

您可以通过更改日志服务 API 设置的一些值来配置日志刷新,记录在 here (source)。默认值是每 10 秒、1024 字节或 20 行刷新一次,以先到者为准。您可以单独禁用它们中的任何一个,或禁用整个自动刷新过程。

完全禁用自动刷新:

from google.appengine.api import logservice
logservice.AUTOFLUSH_ENABLED = False

# When you want to flush manually, do this
logservice.flush()

每 20 行刷新一次,没有时间或字节限制:

from google.appengine.api import logservice
logservice.AUTOFLUSH_EVERY_SECONDS = None
logservice.AUTOFLUSH_EVERY_BYTES = None
logservice.AUTOFLUSH_EVERY_LINES 20 # The default, but set here for clarity

不要对日志刷新过于吝啬 - 正如您所观察到的,RPC 非常快,当您需要调试某些东西时,不刷新日志可能会非常痛苦。

【讨论】:

但问题是这些刷新调用是如此随机,而且我的输出似乎根据日志是否刷新而发生变化 @RemotePath 抱歉,我不明白 - 是什么让你认为它们是随机的,而不是基于上述逻辑,你的输出如何变化?听起来您没有描述完整的问题。 我不了解日志记录的概念,它们有什么用处,为什么我必须仅在后端处理它们,它们在调试中如何有用?谢谢尼克 更新我的后端后,我必须重新启动后端才能生效 @RemotePath 日志记录允许您查看代码中发生的情况,以防出现问题 - 您可以记录发生的情况。由于您无法将交互式调试器附加到生产过程中,因此这是捕获有关如何生成结果的信息的唯一方法。您没有必须为后端处理它,但由于它们无限期地运行,因此需要某种方式在进程完成之前输出日志条目,因此使用了这个 API。如果您只向它发送短期请求并希望它像前端一样运行,请完全关闭日志刷新。

以上是关于如何减少谷歌应用引擎后端的日志服务 RPC的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌应用引擎日志查看器中正确过滤日志消息?

如何在谷歌应用引擎 RPC 流中将对象作为参数传递?

基于protobuf协议的rpc实现

一个记录到我们后端的 JavaScript 前端日志系统?

gwt、rpc 服务、StatusCodeException 和无可用日志

OpenWrt教程-uhttpd如何支持rpc请求