【问题标题】:ColdFusion Application server crashingColdFusion 应用程序服务器崩溃
【发布时间】:2020-06-12 11:31:15
【问题描述】:

我正在使用 ColdFusion 11,并且有 20 多个网站使用 IIS 设置。

我面临的问题是,在 Windows 任务管理器中,ColdFusion 进程的内存不断增加,当它超过 90% 时,所有站点都停止工作并且消息显示“内部服务器错误”。重新启动服务器后,它又开始工作了。

服务器总共有 30GB 内存,其中 20GB 分配给 ColdFusion JVM。 FusionReactor 也安装在我的服务器上。

这是我的一些发现。

  1. 数据库服务器工作正常。所有查询都在几秒钟内完成。

  2. 我监控了 FusionReactor 中的内存堆图。它不断增加,并且也超出了最大堆大小。 https://www.screencast.com/t/lHGg1my57K

  3. 在 Coldfusion-out.log 中,在服务器崩溃之前记录了重复的错误。

Jun 11, 2020 20:39:24 PM Error [ajp-bio-8014-exec-1186] - Event Name: onSessionStart
Jun 11, 2020 20:39:24 PM Error [ajp-bio-8014-exec-1186] - Message: Event handler exception.
Jun 11, 2020 20:39:24 PM Error [ajp-bio-8014-exec-1186] - Detail: An exception occurred while invoking an event handler method from Application.cfc. The method name is: onSessionStart.
Jun 11, 2020 20:39:24 PM Error [ajp-bio-8014-exec-1186] - Type: Database
Jun 11, 2020 20:39:25 PM Error [ajp-bio-8014-exec-1156] - Event Name: onRequestStart
Jun 11, 2020 20:39:25 PM Error [ajp-bio-8014-exec-1156] - Message: Event handler exception.

日志中重复的其他消息是。

Jun 11, 2020 20:27:56 PM Error [ajp-bio-8014-exec-462] - Event Name: 
Jun 11, 2020 20:27:56 PM Error [ajp-bio-8014-exec-462] - Message: The request has exceeded the allowable time limit Tag: CFLOOP
Jun 11, 2020 20:28:27 PM Error [ajp-bio-8014-exec-475] - Event Name: 
Jun 11, 2020 20:28:27 PM Error [ajp-bio-8014-exec-475] - Message: The request has exceeded the allowable time limit Tag: CFQUERY

有人知道如何调查和找到根本原因吗?

【问题讨论】:

  • 上面写着The request has exceeded the allowable time limit Tag: CFLOOP。您是否在寻找未完成的循环?
  • Fusion Reactor 应该向您显示长时间运行的查询和长时间运行的请求。您可以使用它来查找正在运行该长循环的任何内容。很可能你有一些查询返回一个巨大的记录集,然后让代码循环遍历这些记录调用更多查询。 FR 记录所有已完成的查询,但检查 Requests > Activity 并滚动到底部以查看所有未完成的长时间运行的请求。
  • @BernhardDöbler 我找不到 CFLOOP 引起问题的地方。我怎样才能到达那里?非常感谢您的帮助
  • 听起来您可能在其中一个或多个站点中存在一个或多个内存泄漏 - 但如果是内存泄漏,我希望您会看到 GC overhead limit exceededJava heap space 错误某个点 - 您是否检查过以确认您没有看到流量激增,例如来自攻击?在服务器崩溃之前日志中的那些请求超时,很可能(或者根据我的经验更有可能)成为当时缺乏资源的无辜受害者,而不是它们可能是问题的原因。
  • 我和 Sev 在一起。不要关注请求超时,因为一旦堆达到最大值,它们很可能与“停止世界”垃圾收集有关。我建议您转储堆,然后使用Eclipse Memory Analyzer 对其进行分析。这个免费工具带有一个用于内存泄漏检查的预设,非常有用。至于堆转储:如果您的服务器已经瘫痪,请不要进行转储。由于内存逐渐增加,您已经能够使用更小的样本找到嫌疑人。因此,请使用 8 GB 的容量。

标签: coldfusion coldfusion-11 fusionreactor


【解决方案1】:

我通过更改服务器设置解决了这个问题。我禁用了 CF 服务器监控并调整了 CF 管理员中的请求限制。 感谢@Sev_Roberts 分享您的知识。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多