proc_open(): fork failed errors ~ 포크 실패 에러
Laravel Rss Feed 패키지를 컴포저로 설치하려던 도중 메모리 용량 부족으로 인해 포크 실패 에러가 뜬다.
단순히 메모리 용량이 작아서 unzip 과정 또는 패키지 설치를 위에 메모리에 올리는 과정에 생기는 문제로 보인다.
제일 쉬운 해결방법은 메모리 용량을 올리는 것이지만 그건 물리적인 해결방법에 불과하고 소프트웨어적인 해결방법으로는 메모리 스왑공간을 만들어 주면 된다고 한다.
$ free -m
total used free shared buff/cache available
Mem: 1961 240 1152 48 567 1511
Swap: 0 0 0
Copy
위 명령어를 치면 현재 구동중인 VPS(또는 장치)의 메모리 상태를 보여준다. 나는 2G 모델의 VPS 사용중이고 현재 최대 사용량은 1,511M까지 허용되는 상태이다. (이게 부족하다고...?)
여튼 아래 [Swap: 0 0 0] 부분을 보면 느낌이 오다시피 스왑공간이 전혀 할당되어있지 않고있다. 아, 스왑공간이란 램디스크와 비슷한 개념이라보면 편하다. 하드디스크 공간을 램으로 사용하는 그런 느낌이다.
나는 AWS EC2 인스턴스를 사용중이라 인터넷에서 찾을 수 있는 정보 이외에 아마존 측에서 별도로 가이드라인이 있나 찾아보니 역시나 있었다. 세세하게는 현재 사용하는 인스턴스의 메모리 용량에 추천하는 스왑용량도 아래와 같이 안내해준다.
물리적 RAM의 양 | 권장 스왑 공간 |
RAM 2GB 이하 | RAM 용량의 2배(최소 32MB 이상) |
RAM 2GB 초과, 32GB 미만 | 4GB + (RAM - 2GB) |
RAM 32GB 이상 | RAM 용량의 1배 |
스왑공간은 시스템 관리상 절대로 32MB미만이 되지 않도록 설정해야 한다고한다. 각설하고 스왑공간을 만드는 방법을 바로 알아보자.
1. dd 명령을 사용해 루트 시스템에 스왑파일을 생성합니다. 명령줄의 bs는 스왑 공간의 블록 크기이고 count는 개수입니다. 아래 명령줄은 128Mbyte 공간이 32개, 즉 4GB의 공간을 생성하는 예제입니다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32
Copy
2. 스왑 파일에 대해 순서대로 권한 업데이트, 스왑영역설정, 스왑공간에 위에 설정해둔 스왑파일을 추가해 스왑파일을 사용할 수 있도록 합니다.
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
Copy
3. 위의 절차가 성공했는지 아래 명령으로 확인할 수 있습니다. 위의 내용과 다르게 [Swap: 4095 3 4092] 처럼 스왑공간이 할당되어 사용중인 상태로 보입니다.
$ sudo swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 3840 -2
$ free -m
total used free shared buff/cache available
Mem: 1961 240 1152 48 567 1511
Swap: 4095 3 4092
Copy
4. 시스템 재부팅 시 스왑공간 할당은 비활성화 되므로 이를 자동활성화 하는 코드를 해당파일 마지막 라인에 작성합니다.
#sudo vi /etc/fstab
...
/swapfile swap swap defaults 0 0
Copy
끝