【问题标题】:Adjust DB2 keepalive settings for a Python Cloud Foundry app on IBM Cloud调整 IBM Cloud 上 Python Cloud Foundry 应用程序的 DB2 keepalive 设置
【发布时间】:2018-04-02 18:45:16
【问题描述】:

我在 Bluemix/IBM Cloud 上有一个可以运行的 Python Cloud Foundry 应用程序,它可以连接到 Bluemix/IBM Cloud 上的 DB2 on Cloud 实例,并且可以很好地与它配合使用。

但是,在很长一段时间后(我无法测量时间),与 DB2 的连接关闭,我的查询失败。我可以修改我的代码来检查这一点,但是能够调整 TCP keepalive 设置会很棒。类似于this

非常感谢任何指针。我不确定如何调整 Python Cloud Foundry 应用程序的客户端设置。

干杯。

【问题讨论】:

  • 您使用的是显式事务还是自动提交?如果您使用自动提交(即不使用事务),您是否使用 pconnect 持久连接?
  • 您似乎看到一个池连接在重用时超时失败。嗯.. Keepalive 不会帮助这些情况。问题是什么导致连接关闭? Db2 on Cloud 没有任何空闲连接阈值。也许防火墙有些介于两者之间?另外,您是否使用 Db2 on Cloud 的免费层?这将有助于诊断,因为免费计划有不同的限制。
  • @mao 我昨天更改了我的代码,开始使用ibm_db.pconnect() 而不是ibm_db.connect()。希望这会有所帮助。我使用显式事务。我会在监控应用时及时通知您。
  • @SilentSteel 是的,我确实在使用 DB2 on Cloud 的免费层。一旦我注意到这种超时行为,我还将 DB2 实例绑定到我的 Cloud Foundry 应用程序。不确定这是否会有所不同。
  • 如果您使用显式事务,我认为 pconnect 不适合,请查看文档。

标签: python db2 ibm-cloud cloud-foundry tcp-keepalive


【解决方案1】:

我尝试使用 Python Flask Cloud Foundry 应用和 Db2 on Cloud Lite 计划实例来重现此内容。我的联系似乎可以存活数小时。可能是您正在运行的 python 应用程序有某种超时。

【讨论】:

  • 谢谢!是的,这是一个令人费解的问题。
  • 一些观察结果: - 较小的查询工作正常 - 来自本地运行的应用程序的长时间运行查询工作正常 - 来自在 Bluemix 上运行的应用程序的相同长时间运行查询失败 - 针对不同 db2 实例的相同长时间运行查询(企业)工作正常我同意这里可能存在其他问题。例如,我有多个跨进程发生的 CRUD 操作,这可能会产生一些影响。令人费解的是,它在本地运行良好,但在 Bluemix 上却不行。无论如何,我已经切换到 DB2 Enterprise 计划,到目前为止,问题还没有出现。
【解决方案2】:

我找不到令人满意的解决方案。就像提到的@jackic23 一样,可能还有其他因素在起作用。几件事:

  • 这个问题很难复制
  • 该应用在 localhost 上运行良好,但在部署时却不行
  • 我确实有其他同时发生的 CRUD 操作发生,这可能会以某种方式潜在地发生冲突。可能存在某种在 localhost 上永远不会发生的竞争条件。
  • 我的烧瓶应用程序是使用gunicorn 部署的,它在 30 秒后杀死了工作线程,因此数据库连接在查询中终止。我将超时时间调整为 75 秒,但随后查询开始在 1 秒内返回。

此时,我已切换到 Enterprise DB2 计划,并且该应用程序运行良好。就@jackic23 而言,这里(在我的应用程序的代码中)可能仍有其他事情发生,最终可能需要弄清楚。

现在,我继续前进。感谢@jackic23 对此进行调查!

【讨论】:

  • 确实令人费解,很高兴您能够解决它。也许使用gunicorn 的其他人可以出现并解决该工作线程之谜。祝你好运,德文
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
相关资源
最近更新 更多