私はエビでPDFファイルを作成し、このように、ActionControllerのSEND_DATAを使用して、ユーザーに送信Railsのアプリ(5.0.4、Rubyの2.3.3)を構築しています:なぜsend_dataで送信されたオブジェクトはメモリ内に保持されているようですか?
# data is a Prawn document
send_data data, type: 'application/pdf', disposition: 'inline', filename: 'document.pdf'
私は」ヘロクには、作成され、送信される各ドキュメントで、アプリケーションがますます多くのメモリを使用しているように見えることに気付いた。私はいくつかの原油テストで私のローカルマシンでこれを確認しました。今、send_data
コールの後にGC.start
を配置しましたが、問題は解決しているようです。メモリは常に安定したレベルに戻ります。
私の質問は、send_data
ですか?また、ガベージコレクタは時折「単独で」動作するはずですか? Herokuは安定した記憶増加を示します。ありがとうございました。
ありがとうございます。 GC.startを呼び出さずに実行すると、プロセスは数MBのメモリを解放することに気付いたので、GCが自動的にその処理を行っていると仮定しましたが、呼び出すときにメモリを解放するようには見えませんそれは明白です。私は、 "auto GC"が "light mode"で実行されていると仮定しています。これに関する更なる明確化/確認は、再度認められます。 – flavio
はい、それは "マイナー"モードで動作します。明示的に呼び出すと、それは第2世代のGCオブジェクトでもある「メジャー」モードで実行されます。それに関する素晴らしい記事はこちら:https://www.speedshop.co/2017/03/09/a-guide-to-gc-stat.html – Segfault