Google App Engine 记录了一个新连接的混乱......并且客户端关闭了本地连接

Posted

技术标签:

【中文标题】Google App Engine 记录了一个新连接的混乱......并且客户端关闭了本地连接【英文标题】:Google App Engine logs a mess of New connection for ... and Client closed local connection on 【发布时间】:2018-11-10 23:03:24 【问题描述】:

在我的 App Engine 上查看我的日志。我得到了很多

New connection for "<project_id>-central1:<project_name>"
Client closed local connection on /cloudsql/<project_id>-central1:<project_name>/.s.PGSQL.5432 

就像每秒发生多次一样,只会淹没我的日志。

我无法找到与此相关的任何信息,也许这只是一个非问题。

有什么方法可以防止这种情况发生吗? (不包括过滤)

这是否在不经意间拉高了开闭的运营成本?

我在应用引擎上使用 Django。

【问题讨论】:

【参考方案1】:

我找到了有关同一错误的信息,但它并没有产生很多连接。无论如何,它与 Cloud SQL 代理有关。

您是否按照the instructions in this guide 配置了与 App Engine 的 PostgreSQL 连接?我对“设置本地环境”中的内容特别感兴趣。

我没有在 quotas 或 pricing 页面中找到任何相关字段,但您可以在 Google Cloud Console 中查看帐单:Billing -&gt; Overview -&gt; [PROJECT_ID]

【讨论】:

我已经设置了cloud_sql_proxy。哪些日志看起来很相似,但是,在应用引擎已经部署并且cloud_sql_proxy 没有运行几天后,我仍然看到一堆相同的重复日志。 在计费方面,我不确定如何确定重新连接是否成本不高(目前很低,但可能会更低?)。如果有的话,我无法想象不断重新连接对于数据库连接来说是长期有效的。【参考方案2】:

我发现 this 帖子中提到设置 -verbose=false 将关闭新/关闭的连接日志。

【讨论】:

【参考方案3】:

我不是 django 开发人员,但我猜这个问题的根源是 django 默认为每个请求打开一个到数据库的新连接。

来源:https://docs.djangoproject.com/en/2.1/ref/databases/

持久连接避免了在每个请求中重新建立与数据库的连接的开销。它们由定义连接的最大生命周期的 CONN_MAX_AGE 参数控制。可以为每个数据库独立设置。

默认值为0,保留关闭的历史行为 每个请求结束时的数据库连接。启用 持久连接,将 CONN_MAX_AGE 设置为正数 秒。对于无限制的持久连接,请将其设置为 None。

您可以尝试增加 CONN_MAX_AGE 或将其设置为 None 并且日志消息应该会消失。

【讨论】:

【参考方案4】:

CONN_MAX_AGE 的值更改为None 会有所帮助,但这可能会使您的应用程序遭受机器人攻击,例如暴露我(见下图):

在 abuseIPDB.com 中寻找 IP,我发现了很多关于蛮力/Web 应用程序攻击的报告。

也许将变量值设置为固定数字可以保证您的应用程序安全并停止这些日志。

【讨论】:

以上是关于Google App Engine 记录了一个新连接的混乱......并且客户端关闭了本地连接的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 中的 Google App Engine 日志记录

在 Google App Engine 应用程序中关闭控制台日志记录

如何在 Google App Engine 中创建版本号

如何在 Google App Engine 的 Datastore 模型中获取行数?

无法从 PHP Google App Engine 与 *.roblox.com 通信

App Engine 和 Google 游戏服务 clientId 冲突