1

したがって、私のアプリケーションでは、ユーザーがビデオをアップロードし、FFMPEGを使用して変換してから、FlashMediaServerに転送することができます。最近、問題が発生しました。

ビデオの変換中にエラーが発生した場合は、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)>

これにより、不要になったページに設定された変数が削除されます。負の副作用があってはならず、そのページの処理中に設定された変数の 1 つにまだ潜んでいる可能性のあるメモリをクリアする必要があります。

<cfexecute>ビデオを処理する以外の方法を検討することもできます。ビデオのフォルダーを定期的にチェックし、バックグラウンドで変換するバックグラウンド プロセスがあるでしょうか。バッチ処理に関しては、ColdFusion は必ずしも効率的ではありません。

于 2010-08-10T17:13:50.687 に答える
0

メモリ リークの修正を含む FFMPEG の DSL ラッパーを作成したときに、なぜ車輪の再発明を試みているのか理解できません。

https://github.com/rip747/cfffmpeg

フォークして、必要な機能強化や修正を提出してください。

ところで、発生しているメモリの問題を実際に処理する方法を確認したい場合は、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

Windows を使用している場合は、バッチ ファイルを呼び出して変換とファイル転送を行うことをお勧めします。CFからバッチファイルを実行できます。これにより、CF が変換のためにメモリ全体を消費するのを防ぎ、タスクをバックグラウンドで実行し続けることができます。ステータスの取得を待機する場合は、CF Java オブジェクトのインスタンス化を使用して「タイマー」を追加し、X 秒後にステータスを確認します。

または、コマンド ウィンドウを呼び出して実行することもできます - http://www.forta.com/blog/index.cfm/2006/7/31/Using-CFEXECUTE-To-Execute-Command-Line-Utilities

于 2010-08-02T03:07:11.403 に答える