BodyRTCを使うプロジェクトがメモリを食いつぶします.自分のプロジェクトや一緒に使っているRTCが悪いのかと思いましたが,付属のサンプルでも同じ現象が見られました.BodyIoRTCではこのような現象は起こりません.
bin/choreonoid sample/OpenRTM/OpenRTM-TankVisionSensors-OldIDL.cnoid
の実行経過をスクリーンキャプチャでご覧ください.
図1: シミュレーション開始からメモリの使用量が単調増加
図2: 実メモリを食いつぶしてスワップにも手を出し
図3: メモリを食いつぶして自分が死にました.
確かにOpenRTM-TankVisionSensors-OldIDL.cnoidのサンプルを動かすとメモリ消費がどんどん増えていくようですね。
ご報告誠にありがとうございます、こちらでも調査しますのでしばらくお待ちください。
どうもダイアグラムビューにバグがあって、それのせいでメモリリークしているようです。
ダイアグラムビューは表に表示していると適当な周期で各RTCの状態やポートの接続状況などを調査(ポーリング)して、状態に変化があればそれを表示に反映するのですが、どうもそのポーリングの処理でメモリリークを起こしていて、それを周期的に実行しているので、どんどんメモリリークしてしまっているようです。
そこでこのバグはもちらん修正する必要がありますが、当面の対策として、シミュレーション実行中はダイアグラムビューをタブなどの切り替えで表示しないようにしてみてください。そうすると、メモリリークもおさまるのではないかと思います。(シミュレーション中はログをとっているのでその分メモリ使用量は増えていきますが、妥当な増え方になるはず。)
それか、RTShellを使用される場合は、RTSystemItemやダイアグラムビューはそもそも使う必要がないかもしれませんね。その場合は最初から表示しないようにしてもOKかと思います。
ご面倒をおかけして申し訳ありませんが、よろしくお願いいたします。
改めて調べてみましたが,ダイアグラムビューが関係しているようですが,単純ではなさそうです.
過去のコミットから以下のファイルを引っ張り出してきました.
sample/OpenRTM/OldTankVisionSystem.xml
sample/OpenRTM/OpenRTM-TankVisionSensors-OldIDL.cnoid
sample/OpenRTM/TankVisionSensorOut.conf
以下を実行.
bin/choreonoid sample/OpenRTM/OpenRTM-TankVisionSensors-OldIDL.cnoid
-
シミュレーション実行中はメモリ使用量が単調増加.
-
RTCダイアグラムが表になると増加,裏になると一定.
以下を実行.
bin/choreonoid sample/OpenRTM/OpenRTM-TankVisionSensors.cnoid
-
シミュレーション開始時にメモリ使用量がすこし増加,その後ほぼ一定.
-
RTCダイアグラムが表で裏でも違いがない.
以上が解決の糸口にならないでしょうか?
ご報告ありがとうございます。
まだ全てのメモリリークをつぶせていないとは思いますが、一部については修正しました。多少は状況が改善されているかもしれません。githubの開発版に上げています。
念の為コメントします。シミュレーション中はロボットの動作のログをとっているので、メモリ使用量が増えていく事自体は正常です。もちろん、今回の件はそれ以上に(桁違いに)メモリリークしていたのも確かです。
そうでしたか、RTCダイアグラムでかなりメモリリークしているのかと思っていたのですが、状況によってはそうでもないのですね。
引き続き、調査してまいります。
主にOpenRTMプラグインまわりの修正や機能追加をいろいろとしています。RTSystemEditorの開発者の方にも協力してもらっています。
https://github.com/s-nakaoka/choreonoid/commit/1aee741febfe1d578c86151b50c6a6bebb862386
のコミットまで追いついた状態で,再度
bin/choreonoid sample/OpenRTM/OpenRTM-TankVisionSensors-OldIDL.cnoid
を試したところ,RTCダイアグラムを表にしてシミュレーションを開始してもメモリの使用量が増え続けることはなくなりました.
対応ありがとうございました.
そうでしたか!それはよかったです。
ご確認いただきありがとうございました。