우분투 메모리 부족 - ubuntu memoli bujog


리눅스 메모리 부족 문제 해결 방법
리눅스 메모리 부족 또는 리눅스 swap 메모리 부족 문제를 해결하는 방법에 대해서 설명드리도록 하겠습니다.

리눅스에서 메모리 용량이 부족할 경우 리눅스 swap 파티션을 사용하게 됩니다. 하지만 swap 파티션 또한 용량이 부족할 경우 프로그램 실행이 되지 않거나 out of memory 문제 또는 Cannot allocate memory 등의 문제가 발생할 수 있습니다. swap 파티션 용량을 조절 할 수도 있지만 이번 글에서는 간단히 리눅스 swap 파일 추가하여 리눅스 메모리 부족 문제를 해결해 보도록 하겠습니다.

우분투 메모리 부족 - ubuntu memoli bujog

리눅스 메모리 부족 문제 해결 방법

메모리 용량 및 swap 확인

시스템에서 소스코드 빌드를 하거나, 프로그램 설치, 실행하는 과정에서 물리 메모리, swap 용량이 충분하지 않을 경우 문제가 될 수 있습니다.

swap 용량 확인

현재 할당된 swap 파일 또는 swap 파티션의 swap 용량을 확인하기 위해서 아래의 명령어를 실행합니다.

$ sudo swapon -s

메모리 용량 확인

만약, 위의 명령의 실행결과가 없다면 swap 파티션 또는 swap 파일이 없는 겁니다.
아래의 명령어를 실행하여 전체 메모리 용량 및 사용 가능한 메모리 용량을 확인 할 수 있습니다.

$ sudo free -m
              total        used        free      shared  buff/cache   available
Mem:            486          45         117           1         323         409
Swap:             0           0           0

swap 파일 만들기

메모리 부족 문제가 발생했을 경우, 가장 좋은 방법은 물리 메모리를 추가하는 것입니다.
하지만 물리 메모리를 직접 추가하기 어려운 경우 swap 파티션을 생성하거나 용량을 늘리는 방법으로 문제를 해결 할 수 있습니다. swap 파티션을 추가하거나 크기를 조절하는 방법은 아래의 글을 참고해 주시기 바랍니다.

우분투 파티션 크기 조정

이번 글에서는 swap 파티션의 용량을 늘리거나 추가하는 대신, 간편하게 swap 파일을 추가하는 방법으로 메모리 부족 문제를 해결하도록 하겠습니다.

swap 파일 생성

아래의 명령어를 실행하여 swap 파일을 생성하고 권한을 설정합니다. 아래의 명령어는 4G 크기의 swap 파일을 생성하는 명령어 입니다. 용량 또는 파일이름은 원하시는데로 변경하여 실행하셔도 됩니다.

$ sudo fallocate -l 4G /swapfile
$ sudo chmod 600 /swapfile

swap 파일 설정

그리고 아래의 명령어를 실행하여 위에서 생성한 파일을 swap 파일로 초기화하고, swap 파일로 지정합니다.

$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=4f511657-bfc2-420d-a798-fa9e9d5f1b0a
$ sudo swapon /swapfile

swap 확인

swapon 명령어를 이용하여 swap 장치를 확인하면, 정상적으로 swap 파일이 사용중인것을 확인 할 수 있습니다.

$ sudo swapon -s
Filename				Type		Size	Used	Priority
/swapfile                              	file    	4194300	0	-1

그리고 free 라는 명령어로 메모리 여유공간을 확인하면, swap 의 여유공간이 함께 확인되는 것을 알 수 있습니다.

$ sudo free -h
              total        used        free      shared  buff/cache   available
Mem:           486M         45M        114M        1.7M        326M        410M
Swap:          4.0G          0B        4.0G

환경 설정

위의 명령어로 설정한 경우, 재부팅되면 swap 파일이 적용되지 않습니다. 따라서 /etc/fstab 파일을 수정하여 부팅시 자동으로 swap 파일이 사용되도록 설정합니다. 아래의 내용을 /etc/fstab 파일에 추가하면 재부팅 후에도 swap 파일이 사용되게 됩니다.

/swapfile   none    swap    sw    0   0

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)


우분투 운영체제에 메모리가 충분한데도 스왑이 발생한다.

이것은 지극히 정상적인것이다.

자세한 내용은 아래에서 확인할 수 있다.

https://qastack.kr/server/420778/why-swap-is-used-when-plenty-of-free-memory-is-left

스왑메모리를 늘리는 방법은 다음과 같다.

우분투 메모리 부족 - ubuntu memoli bujog

시스템 감시: 메모리 부족 현상 모니터링 가능

Memory 부족 현상은 1) 실제 메모리와 2) SWAP 메모리를 모두 사용한 상태이다. 이 경우 리눅스 커널의  OOM(Out of Memory) killer가 실행 중인 프로그램을 우선 순위에 따라서 필요한 메모리를 확보할때 까지 하나씩 강제 종료 시킨다. 사용자에 메모리 부족 현상을 알려주는 팝업도 없이 백그라운드 프로그램부터 포그라운드 프로그램까지 강제 종료 시키기 때문에 사용자가 메모리 부족현상을 인지하지 못할 수 도 있다.  예를 들어,  8GB RAM의 우분투 환경에서 Android ASOP소스를 m -j8 (=thread 8개) 옵션으로 full build 하는데 ninja 프로그램이  에러 메시지 없이 종료해서 원인을 찾는데 한참 걸렸다.

메모리가 부족 현상은  근본적으로 RAM을 늘려서 해결해야 하지만,  일시적으로 메모리가 부족한 현상인 경우  SWAP 파일의 크기를 늘려 해결이 가능하다. 최근에 SSD가 빨라서 SWAP을 하더라도 사용성에는 큰 문제는 없다.

1. SWAP 파일 확인 방법

Ubuntu 18.04 부터는  swap 은  /swap parition으로 생성하는 것이 아니고 /swap file로 개선되어 parition 변경 없이 편하게 swap file의 크기를 조절할 수 있다. swapfile은 root 폴더 하위에 /swapfile 로 생성되며 사용 현항은 free 명령어로 확인할 수 있다.  (시스템 감시의 자원의 메모리와 Swap 현황과 동일). Ubuntu 20.04버전에서는 디폴트로 2GB의 스왑이 잡혀있다.

우분투 메모리 부족 - ubuntu memoli bujog
swapfile 은 / 하위에 생성된다
$ free -m 
우분투 메모리 부족 - ubuntu memoli bujog
free 명령어로 swap 의 사용 현형 확인

2. Swap file 크기 조정

Swap file 을 사용 중이라면 swap off 명령어로 비활성화 시켜야 한다. Swap file이 활성화된 상태에서는 "failed 메모리를 할당할 수 없습니다" 라는 에러 메시지와 함께 크기 조정이 안된다. 

# swap 비활성
$ sudo swapoff -v /swapfile

swap 메모리 크기 조정은 fallocate 명령어를 사용한다. 이후 권한을 설정하고 mkswap 명령어로 swapfile 을 만들고 swapon 으로 활성화 시킨다.

# swap 을 8GB 로 조정한 경우 
$ sudo fallocate -l 8G /swapfile

#권한 설정
$ sudo chmod 600 /swapfile

#swap file 만들기
$ sudo mkswap /swapfile

#swap file 활성화 : 리부티하지 않아도 swap file이 활성화 된다.
$ sudo swapon /swapfile

/etc/fstab 을 수정해서 swap file을 마운트 한다.

# /etc/fstab 을 열어서 내용 추가  
swapfile none swap sw 0 0

swap이 정상동작되는지 free 명령어로 확인하다.

우분투 메모리 부족 - ubuntu memoli bujog

참고 : https://psychoria.tistory.com/717