私は、ffmpegとffplayを生成し、入力ffmpegからフレームを取り出し、それらを処理して別のffmpegとffplayに出力するNodeJSスクリプトを持っています。これは1080pを1秒間に約3フレーム処理して処理しますが、なんらかの理由で出力に書き込まれた後にバッファを保持します。これは、クラスタワーカーを使用するかどうかにかかわらず発生しますが、そうした場合でもワーカーは多くのメモリを使い始めます。NodeJSバッファはガベージコレクトされていません
答えて
世代別ガベージコレクタを使用します。これは、ヒープを複数の領域で分割し、それらを管理するための特別なアルゴリズムを使用していることを意味します。ほとんどの割り当てである短命オブジェクトの「保育」と、存続期間の長いオブジェクトの1つ以上の領域保育園。
ナーサリは実行オブジェクトの数に比例するアルゴリズムを使用します。つまり、ガベージの代償を払いませんが、メモリを2倍にする必要があります(コレクションではメモリの半分を放棄し、他のオブジェクトにライブオブジェクト)。
旧エリアでは、プログラムが実行されている間に、ルート(グローバル参照、スタックなど)から開始してライブオブジェクトをインクリメンタルにマークするコンパイルマーク&スウィープまたはマーク&を使用して、 (暗い魔法を使って)起こっている。最終的には、大きな休止を生じさせないように、マークされていないすべてのオブジェクトをインクリメンタルに解放する(すべての空きメモリが現在必要ではないことを正しく観察する - 解放されている限り)スペースが満たされているよりも速く立ち上がります)。
これはこれからです。quora answerです。
V8のメモリ使用量がmax-old-space-size
に達すると、Node.jsガベージコレクションが実行されることがあります。これはV8のヒープメモリの制限です(デフォルトは1.4GB程度です)。私たちがあなたを助けることができるようにするには、コードの一部を投稿する必要があります。また、実行しているNode.jsのバージョンを知るのに役立ちます。
スクリプトを実行して、max-old-space-size
を実際に低い数値に設定して、GCが実際に実行されるようにすることができます。それが実行されるとコードは問題なく、問題はNode.js GC最適化によって引き起こされます。
- 1. 大きなメモリチャンクはガベージコレクトされていません
- 2. Spring Batch ThreadPoolTaskExecutorリファレンスはガベージコレクトされていません
- 3. JavaFXノードオブジェクトはガベージコレクトされていません
- 4. onPictureTakenメソッドのビットマップがガベージコレクトされていません
- 5. WebオーディオMediaElementSourceノードがガベージコレクトされていません
- 6. Intptrハンドルがガベージコレクトされていない
- 7. これらの変数はガベージコレクトされていますか?
- 8. Picasso Targetはガベージコレクトされました
- 9. NodeJS HTML: 'require'は定義されていません
- 10. NodeJS POSTの結果は定義されていません
- 11. CLIネイティブオブジェクトがgen2にスタックされ、ガベージコレクトされていない
- 12. NodeJSでAngular2アプリケーションがすべてロードされていません
- 13. JSONエンコードされたバッファのデータが正しくエンコードされていません
- 14. Pythonがバッファされていないモードで動作していません
- 15. これはガベージコレクトされている理由
- 16. NodeJS:ストリーム/バッファをbase64文字列に変換できません
- 17. ioがnodejsに定義されていません
- 18. Nodejsのresが定義されていませんinside
- 19. NodeJS/Express/Typescriptアプリケーションでルートが実行されていません
- 20. a hrefが連結されていません(nodejs、ejs)
- 21. Nodejsが実行されていません
- 22. NodeJS Mysql - 接続が解放されていません
- 23. NodeJS readdirSync()が実行されていません
- 24. ログがJWTのnodejsに記録されていません
- 25. NodeJS変数セッションが定義されていません
- 26. モジュールがNodeJSで定義されていません
- 27. NodeJS- ReferenceError:wagnerが定義されていません
- 28. IntelliJ IDEA - nodejsプラグイン - passport.initialize()解決されていません
- 29. NodeJSメソッドが許可されていません
- 30. Azure「blobServiceが定義されていません」NodeJSのエラー
ありがとうございます。この場合、データを消しているよりも速くデータを消費していました。それで、それは記憶に積み重なった。 –
つまり、私はffmpeg.stdoutを読み込んでいましたが、出力ffmpegが私が与えていたデータを消費している間に、必要なときに正しく一時停止しませんでした。 –
私は、あなたがそれを理解してうれしいと思う。多くのメモリが使用されるまでNode.js GCが動作しないという問題を抱えている人たちのインターネット上のブログ記事はたくさんありますが、同じ問題があるかもしれないと思っています... – mkhanoyan