서버/AWS (Amazon Web Services)

Amazon Linux 에서 메모리 스왑 파일 생성 (Amazon Lightsail)

날개 2017. 11. 10. 12:36

현재 아마존 라이트세일의 가장 작은 모델에서 워드프레스를 사용하고 있습니다. (현재는 2개)


메모리가 작다보니 (512MB) mysql이 자꾸 죽는 현상이 발생하고 있습니다. (mysql 로그 파일을 보면 innodb에서 메모리 부족 에러가...)


물리 메모리를 늘리기 위해서는 플랜을 상향해야 하지만, 그만큼 비용이 증가하겠죠.


가벼운 서비스를 하는데 플랜을 상향하고 싶지는 않아, 스왑 메모리를 사용하도록 설정해 보겠습니다.

(당연히 스왑 메모리는 (가상)디스크를 메모리로 사용하기 때문에 물리 메모리보다 느리지만, 그래도 SSD이니 예전 HDD에 비해서는 빠르지 않을까 싶습니다. 그리고 운영체제에서도 무작정 스왑 메모리를 RAM처럼 사용하는게 아니고 사용 빈도에 따라 영역 배치에 대한 최적화 조절을 할테니..)


이와 깉이 메모리가 부족한 상황을  피할 수 있는 방법 중에 하드 디스크의(요즘은 대부분이 SSD를 쓰지만...) 일부를 스왑 메모리로 사용 하는 경우가 많습니다. 스왑 메모리를 사용하기 위해 리눅스에서는 스왑 파티션을 만들어 사용하기도 하고 스왑 파일을 만들어 사용 할 수도 있습니다.


그러나, 라이트세일 인스턴스는 (AWS EC2 t2.micro 인스턴스도 마찬가지) 파티션을 따로 만들 수 없습니다. 따라서 이 글에서는 스왑 파티션이 아니라 스왑 파일을 만들어 스왑 메모리로 사용하도록 합니다.



먼저 스왑 메모리가 잡혀 있는지 확인합니다. (스왑 메모리가 이미 있고 충분하지 않다면, 새 스왑 파일을 추가 하든지, 삭제후 충분한 크기로 다시 잡습니다. 참고로 스왑 파일을 삭제하는 방법은 'swapoff 스왑파일명' 으로 스왑을 정지시키고 해당 파일을 삭제 하면 됩니다.)


$ free -m


스왑 메모리가 잡혀 있으면, 얼마나 잡혀 있는지 크기가 나옵니다. 스왑이 없으면 크기가 0으로 나옵니다. (-m 옵션은 MB단위)


또는...


$ swapon -s


스왑이 잡혀 있지 않으면 아무것도 나오지 않고, 스왑이 잡혀 있으면 상태가 나옵니다.





스왑 메모리 잡힌것이 없다면, 아래와 같은 순서로 스왑 메모리를 만듭니다.



먼저 스왑메모리로 사용할 파일을 만든다. 기본 플랜의 램이 512M이므로 너무 작아, 아래에서는 1GB를 잡았다. (블럭사이즈 1M x 1024개 = 1GB)


$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024


정상적으로 만들어 졌는지 확인한다.


$ cd /

$ ls -l




만약, 파일 크기가 만들때 설정한 파일의 크기와 다르다면, dd 명령어를 무엇인가 잘못 사용한 것입니다. rm 명령어로 삭제하고 다시 확인하여 정확히 생성합니다.



이제 만든 파일을 스왑파일로 포맷 합니다.


$ sudo mkswap /swapfile



스왑 메모리를 활성화 합니다.


$ sudo swapon /swapfile




위 화면과 같이 퍼미션은 0600 으로 바꿔줄 것을 권고하고 있습니다. 바꿔줍니다.


$ sudo chmod 600 swapfile



'swapon -s' 또는 'free -m' 으로 스왑이 잡혔는지 확인합니다.




제대로 잡혔으면, 부팅할때마다 자동으로 스왑파일을 활성화 하도록 하기 위해, /etc/fstab 파일을 수정하여 아래의 내용을 추가합니다.


/swapfile swap swap defaults 0 0



예) 



이제 서버가 재부팅 되어도 자동으로 스왑 메모리를 사용합니다.


실제로 안정적이 되었는지는 문제가 되는 서비스를 몇일 정도 두고 봐야 합니다.


하지만 로그상으로 메모리 부족 현상때문에 문제가 발생한 것이라면, 도움이 될 것으로 생각됩니다.


.

.

.


PS. 위의 설정을 해 놓고 서버를 돌린지 약 이틀 정도가 되었습니다. 메모리 사용 상황을 한번 보죠.



물리 메모리(RAM)는 거의 다 사용되었고 (Mem이 25MB정도 남았네요.) 스왑 메모리는 약 149MB정도 사용하고 있습니다.


아직까지는 하루가 멀다하고 죽어대던 DB가 한번도 죽지 않고 정상 동작을 하고 있습니다. 다만 스왑 메모리 사용량이 조금씩 계속 높아지고 있는데, 좀더 추세를 모니터링 해 봐야 할 것 같습니다.






(C) 2017 WingsNote.com (무단 복제 및 게시 금지, 링크 허용)