1

所以我的应用程序允许用户上传视频,使用 FFMPEG 对其进行转换,然后将其传输到 Flash Media Server。最近,我遇到了一个问题。

如果在转换视频时出现错误,我会自动生成 cfcatch 报告 PDF。这次我遇到了“无法分配内存”错误。这让我非常担心,因为我即将推出我的系统,而且我无法承受脚本在最初的几个小时内停止运行。

有没有办法用 ColdFusion 清理内存问题?我的意思是,一旦工作完成,我可以基本上“重置”服务器正在使用的内存吗?

如果您了解潜在的灾难,我相信您会理解为什么我必须找出如何确保我的脚本正确执行。物理修复是重新启动服务器,但我显然不能每次用户上传视频时都重新启动服务器......

4

5 回答 5

3

很好的答案,但我无法让你的脚本如此重新润色,这有什么不同!!!

<cfloop collection="#REQUEST#" item="mydex">
    <cfset StructDelete(REQUEST, "#mydex#", "True")>
</cfloop>
<cfloop collection="#VARIABLES#" item="mydex">
    <cfset StructDelete(VARIABLES, "#mydex#", "True")>
</cfloop>
于 2012-12-12T16:32:45.647 回答
2

我记得读过一些服务器版本在页面请求完成时没有正确处理 COM 对象等。如果其中任何一项是通过设置为变量的 CFC 或 Java 类完成的,则可以将其放入OnRequestEnd.cfm

<cfset StructDelete(variables)>
<cfset StructDelete(request)>

这将摆脱页面上不再需要的任何变量设置。不应该有任何负面影响,并且应该清除在处理该页面期间可能仍潜伏在其中一个变量中的任何内存。

您可能还会考虑使用其他东西<cfexecute>来处理视频。也许有一个后台进程会定期检查文件夹中的视频,然后在后台进行转换?在批处理方面,ColdFusion 不一定有效。

于 2010-08-10T17:13:50.687 回答
0

我不明白为什么当我为 FFMPEG 编写 DSL 包装器并修复其中包含的内存泄漏时,你为什么要重新发明轮子:

https://github.com/rip747/cfffmpeg

Fork 并提交您想要的任何增强或修复。

顺便说一句,如果您想了解如何真正处理您遇到的内存问题,请阅读 CFSEARCHING 的文章:

http://cfsearching.blogspot.com/2007/12/using-ffmpeg-to-convert-video-files-to.html

同样,这种方法包含在 DSL 中。

于 2012-12-12T21:33:31.230 回答
0

我遇到过一些从 CF 中实际手动运行 JVM 垃圾收集很有帮助的实例,通常是当有一个长时间运行的线程进行长期队列管理并且请求运行时间很长时。

在你的情况下可能值得一试。

要从 CF 中运行垃圾收集器,请调用以下命令:

<cfset runtime = CreateObject("java", "java.lang.Runtime").getRuntime()>
<cfset runtime.gc()>

希望能帮助到你!

于 2010-07-28T19:41:36.047 回答
0

If you are on windows, I recommend calling a batch file to do the conversion and file transfer. You can execute the Batch file from CF. This will prevent CF from consuming the entire memory for the conversion and the task can continue running in the background. If you want to wait to get the status, add a "timer" using a CF Java object instantiation to check the status after X seconds.

or you can call a cmd window to run it - http://www.forta.com/blog/index.cfm/2006/7/31/Using-CFEXECUTE-To-Execute-Command-Line-Utilities

于 2010-08-02T03:07:11.403 回答