代码之家  ›  专栏  ›  技术社区  ›  dcolumbus

ColdFusion:CFEXECUTE/FFMPEG内存问题?

  •  1
  • dcolumbus  · 技术社区  · 15 年前

    因此,我的应用程序允许用户上传视频,使用FFMPEG进行转换,然后将其传输到Flash媒体服务器。最近,我遇到了一个问题。

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

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

    5 回复  |  直到 6 年前
        1
  •  3
  •   Will Ryan    12 年前

    很好的回答,但我不能让你的脚本工作,所以重新感动和多大的区别!!!

    <cfloop collection="#REQUEST#" item="mydex">
        <cfset StructDelete(REQUEST, "#mydex#", "True")>
    </cfloop>
    <cfloop collection="#VARIABLES#" item="mydex">
        <cfset StructDelete(VARIABLES, "#mydex#", "True")>
    </cfloop>
    
        2
  •  2
  •   Jordan Reiter    15 年前

    我记得读到一些服务器版本在页面请求完成时没有正确地处理COM对象之类的东西。如果这是通过设置为变量的CFC或Java类完成的,那么可以将其放入 OnRequestEnd.cfm

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

    这将消除页面上不再需要的任何变量集。不应该有任何负面影响,并且应该清除在处理该页期间设置的某个变量中可能仍然隐藏的任何内存。

    你也可以考虑使用其他 <cfexecute> 处理视频。也许有一个后台进程,定期检查文件夹中的视频,然后在后台转换它们?当涉及到批处理时,ColdFusion并不一定有效。

        3
  •  0
  •   Ciaran Archer    15 年前

    我遇到过一些实例,在这些实例中,从CF中手动运行JVM垃圾收集非常有用,通常是在有一个长时间运行的线程执行长期队列管理并且请求运行时间非常长的情况下。

    在你的情况下也许值得一试。

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

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

        4
  •  0
  •   eapen    15 年前

    如果您在windows上,我建议调用批处理文件来进行转换和文件传输。您可以从CF执行批处理文件。这将防止CF为转换消耗整个内存,并且任务可以继续在后台运行。如果要等待获取状态,请使用cfjava对象实例化添加一个“计时器”,以在X秒后检查状态。

    http://www.forta.com/blog/index.cfm/2006/7/31/Using-CFEXECUTE-To-Execute-Command-Line-Utilities

        5
  •  0
  •   rip747    12 年前

    我不明白为什么我为FFMPEG编写了一个DSL包装器,其中包含了对内存泄漏的修复:

    https://github.com/rip747/cfffmpeg

    分叉和提交任何增强或修复,你想。

    顺便说一句,如果您想了解如何真正处理内存问题,请通过以下方式阅读本文:

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

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