판하 판하!
아래는 검색 유입어입니다.
아마 다들 이러한 검색하신 거겠죠?
$ ...중략... noarch: [errno 5] [errno 12] cannot allocate memory
$ ...중략... [Errno 5] [Errno 12] Cannot allocate memory
$ ...중략... [Errno 12] Cannot allocate memory
리눅스 환경의 메모리 부족시 위와 같은 안내가 나타나는데요.
검색을 통해 확인되는 일반적인 통계는
1. 파이썬 멀티 프로세싱
2. 리눅스 패키지 설치
3. 기타 등등
순인 것 같습니다.
저 같은 경우에는 서버내 누군가 자꾸 접속을 하는 것이 확인되어 이를 막기위해 fail2ban을 설치하다가 위와 같은 오류 내용을 확인하게 되었습니다.
관련 내용은 따로 진행해보고 정리하여 여러분께 안내드리겠습니다.
일단, 이 오류가 왜 발생하느냐? 는 별로 궁금하시지 않으시죠?
간단하게 말하면, 그냥 가용 메모리가 없는 겁니다.
"뭔가 일을 하고 싶어서 일할 공간을 찾는데, 모든 방이 가득찼어!" 라는 상태 아무튼 이걸 해결하려면, 방을 만들던지 그냥 밖에서 해! 라고 해야겠죠?
그게 아래의 방법들입니다.
1. swap memory 이용
첫번째 방법은 스왑메모리를 이용하는 방법으로 하드디스크의 용량을 할당하여 메모리로 사용하는 일종의 윈도우 버츄얼메모리 라고 보시면됩니다.
그럼 먼저 얼마나 할당할지 정해야겠죠?
1-1. 파티션 나누기
윈도우에서는 편하게 해주지만, 우리는 리눅스 하나하나 해줘야합니다.
일단 파티션을 원하는 용량으로 나누어야합니다.
$ dd if=/dev/zero of=/swapfile bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 3.29169 s, 163 MB/s
생성된 실제 파티션의 용량은 bs * count 가 됩니다.
1-2. 파티션을 스왑메모리 공간으로 만들기
그럼 이제 만들어진 파티션을 스왑메모리라고 여기서 일하라고 알려줘야겠죠?
$ mkswap /swapfile
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=027ea005-62a3-46a8-9a5a-3bd5e2605af3
1-3. 스왑메모리 사용하기
이제 여기가 일할 수 있는 곳이라고 모두에게 알려줘야 올 수 있겠죠?
$ swapon /swapfile
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
그럼 이제 이 공간도 북적북적 붐비게 될겁니다.
참고로 swapon 사용시 나오는 안내 문구는 안전하지 않은 권한이 0644이며, 0600을 제안 한다는 의미로 0600으로 퍼미션이 변경됨을 의미합니다.
보안상 이슈다보니 권장값에 따르는 것이 좋겠지만 변경하셔도 동작에 문제는 없습니다.
2. overcommit 이용
주의! 널리 사용되는 CPU 오버커밋과는 달리, 메모리 오버커밋은 자주 사용되지 않습니다.
왜냐하면 CPU 오버커밋 대비 감수해야 하는 성능 저하 폭이 아주 크고, 특정 운영 환경에서는 서비스 중단을 일으킬 수도 있기 때문입니다.
그럼에도 안내 드리는 것은 서비스에 따라 %를 잘 조정하시면, 이와같은 상황을 보다 쉽게 대처하실 수 있기 때문입니다.
관련 내용은 아래 글을 참고하여 주시면 제가 후술할 내용보다 자세히 이해하실 수 있을 겁니다.
vm.overcommit에 대한 짧은 이야기
Linux Kernel Internal | 이번 글에서는 vm.overcommit에 대해서 다뤄볼까 합니다. 막연하게 메모리를 많이 쓸 수 있게 해주는 거 아니야?라고 생각 해왔었는데요, 살펴보니 조금 다른 의미였습니다. 그
brunch.co.kr
그럼 아래는 각 방식에 따른 overcommit 수정 코드입니다.
2-1. 오버커밋 률 수정 / 적용
작성해둔 내용으로 보면 오버커밋이 전혀 없을 것 같지만, 실제로는 오버커밋이 기본적으로 존재하며, 50% 기본값을 가지고 있습니다.
$ sudo bash -c "echo 90 > /proc/sys/vm/overcommit_ratio"
$ sudo bash -c "echo vm.overcommit_memory=2 >> /etc/sysctl.conf"
$ sudo sysctl -p
2-2. 항상 오버커밋 하도록 적용
말 그대로 메모리 부족 현상 발생시 항상 오버커밋을 하여 메모리 부족 안내를 반환하지 않도록 합니다.
만... 이 내용도 실제 동작과는 다른 것으로 보입니다. (아마, 그냥 false 처리를 ture 로 항상 반환하는 것 같음)
$ sudo bash -c "echo vm.overcommit_memory=1 >> /etc/sysctl.conf"
$ sudo sysctl -p
'개발새발 박스 > ssh' 카테고리의 다른 글
클라우드 서비스에서 Key 그리고 비밀번호 입력하여 접속하는 방법 (0) | 2022.12.12 |
---|