DRAM1GB以下のラズパイでのビルドが困難
不具合の概要
colcon build --symlink-installすると、gccが675MBのメモリを消費してしまい、スワップのデーモンが作動して処理が進まなくなる。
実行環境
- Rasberry Pi 3B+
- Ubuntu 22.04 LTS
再現方法
$ colcon build --symlink-install
(別のモニタでtopを実行)
対処方法
何らかの方法でgccがメモリを浪費しないようにする。(makeのオプションでなんとかなるのがベスト)
その他
まだ教材で古いラズパイを使っているところがあるので、ぜひご検討ください。(無理でしたら自身で簡略版を作ります。)
ご報告ありがとうございます。
環境変数MAKEFLAGS=-j1 を設定してビルドが通るか確認お願いします。
$ MAKEFLAGS=-j1 colcon build --symlink-install
関連issue: https://github.com/rt-net/raspimouse_ros2_examples/issues/23#issuecomment-820096612
既出とのことで、失礼いたしました。
月曜まで試せないのですが、たぶん-j1が使えるなら大丈夫かもしれません。(ただ、メモリを使い切った時にg++のプロセスがひとつしか立ち上がっていなかったので、まだ多少の懸念があります。)
今のREADMEだとラズパイ3以前ではビルドできないので、あとでREADMEにプルリクを出します。
お手数をおかけします。 READMEへの記載ができていなかったので、プルリク助かります。ありがとうございます。
(ただ、メモリを使い切った時にg++のプロセスがひとつしか立ち上がっていなかったので、まだ多少の懸念があります。)
これ的中しました。ダメでした。コードをみてもメモリを大量に使いそうなところはなく、ということはcolconがメモリ使いすぎてるような気がするので、ちょっと調べてみます。
いや、CMakeLists.txtを見たのですが、1ノードでライブラリをたくさん使っているので、メモリはやっぱりたくさん使いますねこれ。ラズパイ3を切り捨てるか、ノードを分けるかですね・・・
調査ありがとうございます。
RasPi 3B で MAKEFLAGS="-j1 -l1" colcon build --symlink-install --executor sequential を実行しましたが、
raspimouseのビルドが25%に達したところでフリーズしました。
オプションの参考:https://answers.ros.org/question/304300/compilling-ros2-on-rasperry-pi/?answer=304668#post-id-304668
解決策として以下を提案します。
- バイナリパッケージを使用する(ただしHumbleでは未リリースです)
- パッケージ構成を変更する
- ビルド&強制終了を繰り返す
- 一時的にSAWP領域を拡張する
パッケージリリースと、パッケージ構成変更については、すぐに対応できないので、 SWAP領域の拡張を推奨します。
https://noknow.info/it/os/scale_up_swap_area_temporarily?lang=ja を参考に2 GBのSWAP領域を確保した後、文頭のビルドコマンドを実行した場合、約4分でビルドが完了しました。
実際は0.1GB程度しか使用されていなかったので、0.5 GBくらいの領域があれば十分だと思います。