【发布时间】:2020-06-12 11:31:15
【问题描述】:
我正在使用 ColdFusion 11,并且有 20 多个网站使用 IIS 设置。
我面临的问题是,在 Windows 任务管理器中,ColdFusion 进程的内存不断增加,当它超过 90% 时,所有站点都停止工作并且消息显示“内部服务器错误”。重新启动服务器后,它又开始工作了。
服务器总共有 30GB 内存,其中 20GB 分配给 ColdFusion JVM。 FusionReactor 也安装在我的服务器上。
这是我的一些发现。
数据库服务器工作正常。所有查询都在几秒钟内完成。
我监控了 FusionReactor 中的内存堆图。它不断增加,并且也超出了最大堆大小。 https://www.screencast.com/t/lHGg1my57K
在 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 exceeded或Java heap space错误某个点 - 您是否检查过以确认您没有看到流量激增,例如来自攻击?在服务器崩溃之前日志中的那些请求超时,很可能(或者根据我的经验更有可能)成为当时缺乏资源的无辜受害者,而不是它们可能是问题的原因。 -
我和 Sev 在一起。不要关注请求超时,因为一旦堆达到最大值,它们很可能与“停止世界”垃圾收集有关。我建议您转储堆,然后使用Eclipse Memory Analyzer 对其进行分析。这个免费工具带有一个用于内存泄漏检查的预设,非常有用。至于堆转储:如果您的服务器已经瘫痪,请不要进行转储。由于内存逐渐增加,您已经能够使用更小的样本找到嫌疑人。因此,请使用 8 GB 的容量。
标签: coldfusion coldfusion-11 fusionreactor