빌드 중 컴퓨터의 자원부족으로 프로그램을 강제 종료시켰을 때 발생하는 오류이다.
대응방법으로는 1. SWAP메모리를 확보하는 방법, 2. 동시에 빌드하는 패키지의 수를 조절하는 방법이 있다.
1. SWAP메모리 확보
SWAP메모리는 SDD/HDD의 일부를 RAM처럼 사용할 수 있도록 하는 방법이다. RAM 용량이 부족할 때 사용한다. 메모리에서 당장 사용되지 않는 부분(pages)을 일시적으로 하드디스크에 옮겨서 RAM을 충분히 더 활용할 수 있도록 한다.
일반적으로 4GB이하의 램에서는 RAM용량의 2배, 4GB 이상에서는 RAM과 동일한 크기의 사이즈면 충분하다고 본다. RAM사이즈가 굉장히 큰 고성능 컴퓨팅에서 SWAP은 2 GB 에서 4GB 만 있어도 충분할 것이다.
여러 블로그 글을 보고 실행해봤지만, 내 경우에는 도움이 되지 않았다.
2. 동시에 빌드하는 패키지 수 조절
ubuntu를 기준으로 터미널에서 nproc을 실행하면 동시에 사용가능한 threads의 수를 알 수 있다.
그리고, 동시 사용 가능한 threads의 수를 토대로 아래의 colcon build 메세지에 옵션을 설정해서 추가한다.
MAKEFLAGS=-j8 # 패키지당 최대 쓰레드 수 = 8
--parallel-workers=2 #빌드 중 동시 작업 패키지 수 = 2
예)
MAKEFLAGS=-j8 colcon build --parallel-workers=2 --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
패키지당 최대 쓰레드 수 * 빌드 중 동시 작업 패키지 수가 nproc으로 확인한 동시 사용가능한 threads의 수를 넘지않도록 직접 컨트롤해주면 빌드 오류가 사라질 것이다. 물론, 빌드 속도는 조금 느려질 것이다.
'Computer programming > ROS2' 카테고리의 다른 글
C++, ROS2 에서 time stamp 활용, 비교 (0) | 2023.02.19 |
---|
댓글