obs-rtmp-nicolive icon indicating copy to clipboard operation
obs-rtmp-nicolive copied to clipboard

obs-rtmp-nicoliveを使った場合にNumber of memory leaksが増える

Open style1925 opened this issue 9 years ago • 7 comments

このプラグインを導入して配信をした場合、OBS Studio終了後ログファイル最終行を見るとメモリリーク?が発生しているようです。 本当に発生しているか分からないですが、気になるので調査よろしくお願いします。

ログ (最後一部抜粋) 16:28:01.355: Number of memory leaks: 72 15:30:00.465: Number of memory leaks: 36

発生環境 Windows 8.1 Pro 64bit / OS X El Capitan 10.11 OBS Studio 0.16.5 / OBS Studio 0.16.2 ※どちらも公式バイナリ+BrowserSourceがある obs-rtmp-nicolive v2.1.0

発生設定 1、OBS Studio にプラグイン導入

発生手順 1、OBS Studioを起動する。 2、配信枠を取得して、OBS Studioを配信開始させる。 3、配信停止をさせて、OBS Studioを終了。 4、最後のログを開いて、一番下を見る。

回避する方法 1、このプラグインを利用しない

ちなみにWindows版は「BrowserSource」が同梱されていると、配信開始せずに終了させた場合「Number of memory leaks: 1」が必ず発生する。 「BrowserSource」が同梱されていない場合は、配信開始せずに終了させた場合「Number of memory leaks: 0」になる。 また「BrowserSource」を使うと数字(ここでは1)が増える所までは分かっています。(使わなければOK)

Mac版は「BrowserSource」があっても終了時に発生はしてない。(謎)

style1925 avatar Nov 18 '16 07:11 style1925

デバッグコンパイルしてテスト中は一桁だったのですが…。

内部的にQObjectを使っているのですが、プラグインの削除処理の時にこのオブジェクトはdeleteLater()で、あとからゆっくり削除になっています。あとからゆっくり削除が終わる前にOBSが終わってしまったので、解放されていないメモリとしてカウントされたのでは無いかと思っています。このメモリリークのカウントの仕組みもよくわかってないんですけど。

長時間走らせた場合に劇的に増えると言うことがなければ、大丈夫だと思っています。次のバージョンから、QObjectを廃止する(たぶん)ので、上が原因なら、ほとんど出なくなるなるはずです。

raccy avatar Nov 18 '16 10:11 raccy

あとからゆっくり削除はどれぐらいかかるものなのでしょうか? 例えば、1回放送したとしてそのままOBS Studioを放置していると内部では削除処理が進んでる感じですか? (この理解であってるのか不安ですが…)

次期バージョンでの廃止(たぶん)で、どうなるか楽しみです。

style1925 avatar Nov 19 '16 09:11 style1925

さすがに笑ったしまったのでコメントします

deleteLater()は多分Qtのイベントループに入った時点でdeleteするようになってると思います。 別にゆったりサボりながら開放してるわけではないですw (多分ユーモア的に言っただけでは)

OBS実行中によっぽどCPUが100%とかの状況じゃない限り開放すると思うのでリーク数が増加していくなら実際リークしてる可能性はあると思います(内部はわかってません)

diginatu avatar Nov 19 '16 09:11 diginatu

そ、そういう感じなんですね…w プログラムとかは全然分からないので、変な理解をしていました。。。 笑ってしまう程ひどかったのかな\(^o^)/ 教えて頂きありがとうございます。

style1925 avatar Nov 19 '16 09:11 style1925

ちょっとおもしろかったですすみません。

それにしてもOBSはどうやってカウントしてるんでしょうね、前に一般的なCのリーク検出ツール使った時はデフォで大量に誤検出(?)みたいなのして使えなかった経験があります

diginatu avatar Nov 19 '16 09:11 diginatu

謝らないで下さいー。 わからないなりに考えた結果がこれなのでw

このカウント自体が、どのような仕組みになってるかは気になりますね…。

style1925 avatar Nov 19 '16 09:11 style1925

プラグインの削除処理は終了処理の時に走るのでQtのスレッド自体はフル稼働じゃないのかなと思ってるんですが…カウント結果を出すタイミングも欲わからないんですよね。終了時にログに出すけど、QObject全部消したのを確認してから出しているのかどうかとか。

raccy avatar Nov 19 '16 22:11 raccy