[개발] AWS EC2 서버가 아무 이유없이 심하게 느려질 때 해결 방법
안녕하세요. 박세계입니다.
원래 다음 시리즈의 2탄을 바로 준비했어야 했는데 늦은 새벽까지 해야할 일이 있어서 올리지 못했습니다. 감사하게도 기다려주시는 분들이 계신데 가능하면 오늘 늦게라도 올리도록 하겠습니다.
늦게까지 해야했던 일 중 웹사이트 튜닝이 있었는데 생각보다 애를 많이 먹었습니다. 나중을 위해 기억하는 의미에서 공유합니다.
[목차]
- 결론
- 서버 상황
- 문제 상황
- 해결방안 접근
- 문제 해결
1. 결론
타인의 삽질 경험을 듣는게 생각보다 도움 되는 경우가 많아 상황을 자세히 설명하려 합니다. 그래도 결론만 보고 싶은 분들을 위해 결론을 먼저 공유합니다.
- 문제: 서버 사양이나 소스 코드에 문제가 있지 않은게 유력시 되는 상황에서 특정 시간대에 서버가 심하게 느려짐.
- 해결: AWS EC2 Instance를 Stop/Start로 서버군을 변경하여 해결. (참조 링크)
2. 서버 상황
최근 투잡으로 웹사이트를 하나 만든게 있습니다. 복잡한 사이트도 아니고 사용되는 데이터의 크기도 매우 작습니다. 많아봐야 수 백건의 데이터중 백 여건의 데이터를 조회하는 정도입니다. 키오스크(상점등의 디지털 단말기)에서 호출하는 사이트인데 키오스크 갯수는 4개가 전부입니다. 즉, 매우 가벼운 사이트이며 동시접속이 거의 없다시피 해서 절대 고사양의 서버가 필요치 않았습니다.
서버는 다음과 같습니다.
- 서버: AWS EC2
- 위치: Asia Pacific (Seoul)
- 사양: t2.micro (Free Tier)
- 용량: 60GB (Free Tier + EBS 30GB 추가)
- OS: Windows Server Datacenter 64-bit
- DB: SQL Server 2017 Express
- 언어: ASP.NET C#
이렇듯 일반적인 Free Tier로 셋팅했으며 데이터나 트래픽이 많은 특수한 서비스를 제외하면 문제가 되는 경우는 없었습니다.
3. 문제 상황
사이트를 느리게 만들고 싶어도 그렇게 하기 힘들 정도로 가벼웠고, 동시접속이 거의 없기 때문에 별다른 문제가 없어야 했습니다. 그런데 그것이 실제로 일어났습니다.
상황이 정말 묘했던게 차라리 사람이 많이 접속할만한 시간대에 서버가 느려지면 그런가보다 하겠는데, 특히 자정 전후로 해서 접속이 거의 안될만큼 느려졌습니다. 자정이면 키오스크를 사용할 사람이 없기 때문에 접속이 아예 없는 상황입니다. 그런데 미친듯이 느렸습니다. 서버에 들어가 뭔가 살펴보려 해도 CPU와 RAM이 거의 99%에 가까워 들여다보기도 쉽지 않았습니다.
어지간한 상황은 서버 재부팅을 통해 임시로라도 가용상태로 만들수 있는데, 오늘 새벽에는 재부팅도 통하지 않았습니다. 아무도 접속을 안하고 있는데 정말 이상했습니다. 일과중에는 가끔씩 느려지는 상황은 있어도 전체적으로 큰 문제없이 돌아갔기 때문입니다.
4. 해결방안 접근
그렇게 사건은 미궁속으로 빠지며 수 주에 걸쳐 스트레스를 받던 중 느닷없이 깨달음이 왔습니다.
혹시 AWS 서버 자체에 문제가 있는건 아닐까?
저는 문제 발생시 서버 핑계 대는걸 매우 싫어합니다. 보통 그런 상황보다 소스 코드나 설정에 문제가 있었던 경우가 월등히 많았기 때문입니다. 이번에는 정황상 정 반대의 경우라 판단했습니다. 아주 늦게 말이죠.
AWS 서버에 문제가 있는 경우는 크게 두가지입니다.
- 서버 자체에 물리적 결함이 있는 경우
- EC2는 결국 물리적 서버가 아닌 VM이기 때문에 같은 물리적 서버에 있는 타 VM이 너무 많은 자원을 사용해서 덩달아 느려지는 경우
제 경우는 매번 특정 시간대에 절묘하게 느려지는걸로 봐서 2번에 해당된다는 생각이 들었고 서버를 옮기는게 낫다고 판단했습니다. 서버인지 서버군인지는 정확히 모르겠습니다. 암튼 문제의 VM이 있는 물리적 서버에서 벗어나야 했습니다.
5. 문제 해결
방법은 간단히 EC2 Instance를 Stop/Start 하는 것이었습니다. 주의할 점은 Restart는 서버를 옮기지 않으며 꼭 Stop/Start를 해야 합니다.
You may want to stop and start (not reboot) instance. this will make the instance come up on a different hypervisor (host box). it may be the current shared host has issues that will be resolved when launching vm on new host.
이렇게 한 이후로 아직까지는 문제가 없습니다. 이게 맞았던거 같습니다. 혹시 아닐수도 있으니 더 모니터링을 해보고 다른 문제라면 울면서 다시 올리도록 하겠습니다.
감사합니다.
Cheer Up!
Cheers :)
좋는글 감사히 보았습니다.
20% 보팅을 했을때와 동일한 금액을 드립니다.
tip! 0.5
완전 감사합니다. 콘님 진짜 쿨하시네요 ㅋㅋㅋ
Upvoted and RESTEEMED!
Thanks :)
Restart 가 아니라 stop start 라고요.
잘 기억해 두겠습니다. ^^
네네 둘다 똑같아야 하는데 Restart는 서버를 바꾸지 않더라구요. 방문 감사합니다 주노님 ^^
Nice post! thanks for sharing
Thanks for your comment @dexterslove :)
your welcome! from now on i will support your post and resteem. thanks for reply
Thanks for your support again :)
컴터든 게임기든 껐다 키는 게 역시 진리인가봅니다 ㅋㅋㅋ
네 맞아요 ㅋㅋ 이 쉬운걸 놔두고 왤케 헤맸는지 ㅜㅜ 사실 다른 작업이 쌓여있어서 이걸 우선순위에서 미뤄놓긴 했는데 진작 볼걸 그랬단 생각이 들었습니다. 늘 그렇듯이 정답은 늘 가까이 있는거 같아요. 물론 여기서도 그 정답은 껐다가 다시 키기가 맞았구요 ㅋㅋㅋㅋ
저는 아마존이 아니라 구글과 네이버를 쓰지만... 비슷하게 해결도 가능하겠군요 . 비슷한 상황오면 해보겠습니다 👏👏
네네 어차피 아마존이 특별하기보다 가상머신을 쓰는 모든 서비스는 필연적으로 같은 문제점이 있다고 생각합니다. 분명 언젠가 필요한 날이 올거라 믿습니다. 많은 애용 부탁드려요! 라고 말씀드릴건 아니지만요 ㅋㅋㅋㅋ
good
Thanks :)
good job my friend..
Thanks my friend :)
초보지만 대충 상황이 이해가 되는 것 같습니다. 하나의 서버를 여럿이서 나눠쓰는건데. 다른 이용자가 리소스를 다 잡아 먹는 일이 발생하는 건가 보군요. 경험 공유 감사드립니다. ㅎㅎ
네 맞습니다. 이렇게 글을 올려놓고 좀더 모니터링 해보니 이 상황이 아닐수도 있겠지만요 ㅎㅎ 지금으로썬 이게 가장 유력한 상황인거 같습니다. 읽어주셔서 감사합니다 :)
와...세계님 대단하셔요!!!👍
아닙니다. 더 빨리 해결을 했어야 하는 상황인데 미루다 미루다 늦게나마 찾았습니다. 늘 그렇듯이 결국에는 엄청 쉬운 방법이었지만요 ㅎㅎ 좋게 봐주셔서 감사합니다 지안님 ^^