Post View

AWS EC2 서버가 너무 느릴 때, 스왑 메모리 활용

한동안 제 블로그가 접속이 안되고 있었는데요.
기존에는 개인 PC에 블로그 서버를 띄웠었습니다.

그런데 약 1년전 쯤 서버의 디스크가 명을 달리하였고, 다시 복구 해야지... 하다가 1년이 지나버렸네요.

현재는 AWS에서 가장 저렴한 ec2 노드인 t4g.nano를 사용하여 블로그를 올려둔 상태입니다.

t4g.nano의 사양은 무려 vCPU 2코어!!! 에 맞지 않는 0.5GB의 메모리가 특징입니다.
물론 컴퓨팅에서 가장 중요한 CPU라지만,,, 0.5GB의 메모리로는 동작할 수 있는게 많지 않습니다.

0.5GB를 가지고 서비스를 올리는데만 쓰는게 아니라, 운영체제를 유지하는데도 함께 쓰이기 때문인데요.
실제로 그렇게 크지 않은 서비스인 https://shtn.io나, https://thotz.org와 같은 서비스가 0.5GB에서는 시작 자체가 안되거나, 서버시작 중에 멈추는 현상 등이 발생합니다. (초기 힙 사이즈를 조정해도 한계가 존재합니다.)

주로 Jenkins와 같이 메모리를 많이 사용하는 서버의 경우 서버가 뜨지 않거나, 뜨더라도 너무 느려서 사용을 못하는 수준이 되는 경우가 있습니다.

스왑 메모리(Swap Memory) 설정

스왑 메모리는 하드디스크에 비해 상대적으로 비싼 메모리를 하드디스크로 대체하는 용도로 사용되었습니다.
사실 aws에서 저용량의 메모리를 사용하는 것도 결국 비용적인 문제이므로 현재의 상황과 동일하다고 볼 수 있습니다.

아래의 명령어를 통해서 상대적으로 저렴한 SSD(EBS)로 메모리를 대신할 수 있습니다.


# 현재 메모리 상태를 확인합니다.
free -h

# 활성화된 스왑 영역을 확인합니다.
swapon --show

# "/mnt/swapfile" 경로에 메모리의 역할을 해줄 4GB의 스왑 파일을 생성합니다. 
sudo fallocate -l 4G /mnt/swapfile

# 스왑파일의 권한을 설정합니다.
sudo chmod 600 /mnt/swapfile

# 해당 파일을 스왑 공간으로 설정합니다.
sudo mkswap /mnt/swapfile

# 해당 스왑 공간을 활성화 합니다.
sudo swapon /mnt/swapfile

위의 명령어를 순서대로 입력하면 스왑파일이 생성됩니다.
이후 원하는 서버를 실행하면 동작하는 것을 볼 수 있을겁니다.

스왑 메모리를 사용할 때 주의하실 점은 결국 메모리가 부족한 것을 보조기억장치(SSD, HDD)를 이용하여 해결하는 것이다 보니, 메모리를 직접 사용하는데 비해서는 느려질 수 밖에 없습니다.

만약 메모리가 충분한 서버에서 스왑 메모리가 활성화 되어있는 경우 보조기억장치를 읽어오면서 기존보다 성능이 느려질 수 있습니다.
이런 부분을 알고 이용하신다면 더욱 효율적으로 스왑 메모리를 활용할 수 있을겁니다.

Comments