【问题标题】:If a secondary database crashes, will it crash the primary coldfusion server?如果一个辅助数据库崩溃了,它会导致主coldfusion服务器崩溃吗?
【发布时间】:2010-06-17 18:44:43
【问题描述】:

现在我们正在处理我的公司环境中的一个难题,我们被指责为服务器崩溃,但我不能 100% 确定我们是罪魁祸首。这是服务器环境:我们有一个主要的 Coldfusion 及其 MSSQL 数据库。然后,我们还有一个托管在不同云上的辅助数据库 (MySQL),用于执行各种任务。系统以这种方式构建的主要原因是因为主服务器由我们的内容管理系统操作,因此我们不允许修改它、添加表或任何类似的操作,因此我们使用备用数据库。按照设计,其中没有关键任务项目,并且页面的构建方式使得如果备用数据库没有返回任何行,页面将继续正确呈现。

基本上,有人告诉我,当备用 MySQL 服务器出现故障或停止接受连接时,它会占用整个主云,包括托管在其上的 5 个其他站点。我无权访问主要的 Coldfusion 或数据库日志,因为 CMS 提供商不会将它们提供给我。因此,我只能根据他们给我的解释的有效性来判断。

我们的 CMS 提供商对此行为的解释是,当 Coldfusion 查询数据库时,它会创建一个线程,并且如果数据库没有响应,线程会继续堆叠。最终处理器被封顶,服务器宕机。这是对 Coldfusion 运作方式的准确解释吗?如果是这样,有没有办法阻止它,可能有更短的数据库超时等?还是我们的 CMS 提出的整个解释只是一个红鲱鱼,而真正导致崩溃的是其他原因。

任何指导将不胜感激。

已回答问题 - 找到的文件 http://kb2.adobe.com/cps/180/tn_18061.html http://www.adobe.com/devnet/server_archive/articles/cf_timeouts_and_unresponsive_requests.html

全局设置超时请求不会使等待外部资源(cfquery/cfhttp 等)的内部进程超时。使这些超时的唯一方法是手动设置超时属性。不设置这可能会导致线程过载和服务器崩溃,就像我们发生的那样。

【问题讨论】:

    标签: mysql coldfusion


    【解决方案1】:

    http://kb2.adobe.com/cps/180/tn_18061.html

    从阅读要点 3 并根据您的流量,您的 CMS 人员可能是对的。

    同样来自上面的链接:

    如果数据库关闭且无响应,ColdFusion Server 将尝试重新连接数据库多少次?它最终会重新启动 ColdFusion 服务器吗?

    当查询请求发生时,如果数据库宕机或者到数据库的网络连接宕机,连接会超时(可以通过cfquery标签中的timeout属性自定义超时时间)并向用户返回错误.请注意,设置连接超时的能力取决于您使用的驱动程序。您可以捕获此错误并使用 cftry/cfcatch 标记以编程方式处理它。

    这里的问题是 cfquery 标记上的超时变量与 MySQL ODBC 驱动程序不兼容。找不到默认超时时间。假设5分钟。如果您在这 5 分钟内收到多个请求,则连接似乎会开始“堆积”。

    【讨论】:

    • 嗯,很好的发现。与 MySQL 驱动程序“不兼容”是什么意思?就像在 cfquery 标记中忽略超时值一样?应用程序范围的超时值怎么样,或者限制同时请求。它像堆栈还是队列一样运行? IE一旦充满就不再接受,或者一旦充满它就会丢弃最旧的?考虑到所有这些,是否有办法防止这些崩溃?
    • 不兼容 - 根据他们的知识库文章,这意味着不支持。我认为服务器设置中这两个变量的组合将有助于解决问题。超时(分钟):ColdFusion MX 在销毁未使用的连接之前保持它的分钟数。间隔(分钟):服务器在周期之间等待以检查过期数据源连接关闭的时间(以分钟为单位)。
    • 另外,你可以使用try/catch,但是因为你不调用连接,所以像.NET/Java一样运行SQL;我认为您的 try/catch 会在引发异常之前等待服务器设置的 ODBC 超时发生。但是,您应该能够为该数据库连接调用某种类型的关闭调用。抱歉,我在做 CF 时并没有真正深入了解:/
    • 刚刚找到此文档adobe.com/devnet/server_archive/articles/… 它指出“但是,由于 ColdFusion 只能超时发生在 ColdFusion 服务器内部的处理,超时请求设置不会超时主动运行数据库查询或任何其他外部调用(例如 cfhttp、cfftp、cfobject、cfx 等)”这几乎说明了应用程序范围的超时请求将不起作用,那么 cfquery 超时功能会起作用吗?此外,您在哪里看到不支持 MySQL cfquery 超时,我找不到那种措辞。
    • 以上链接中的要点 2:SQL Server ODBC 驱动程序以及 DB2 和 Informix 本机驱动程序当前支持 timeout 属性。 Oracle 本机驱动程序、Sybase 本机驱动程序、Oracle ODBC 驱动程序和许多其他 ODBC 驱动程序不支持它。由于他们没有提到 MySQL,我认为它是许多其他 ODBC 驱动程序之一。
    猜你喜欢
    • 2015-03-13
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多