회사에서 사용하는 테스트용 클라우드 서버를 ubuntu 20.04 에서 ubuntu 22.04 로 업그레이드 한 후 가끔식 서버가 먹통이 되는 현상이 발생하고 있다. 웹서버가 동작하지 않고 ssh 조차 접속되지 않는 현상이 가끔씩 발생했다. 이 현상이 발생하면 cloud 서버 관리 사이트에 들어가서 강제로 재부팅을 시키곤 했다.
로그를 분석해 보면 cron 서버스가 동작하면서 밤사이 CPU 사용률이 100%가 되는 현상이다. 그래서 우선 불필요한 cron 서비스를 제거했다. 어차피 테스트 서버라서 잘 작동하지 않아도 문제될 것은 없다. 그러다 평소 습관대로 free -h 명령어를 사용해 보았다. 이 명령어는 메모리가 어떻게 사용되고 있냐를 확인하는 명령어 이다. 그런데 swap 메모리가 전혀 사용되지 않는 것을 확인 했다.
total used free shared buff/cache available
Mem: ...............................................
Swap: 8.0Gi 0B 8.0Gi
대충 위와 같이 swap 의 used 가 0 인 것을 발견했다.
이 서버가 테스트 서버인지라 메모리가 2G가 안된다. 그래서 Postgresql 돌리고 웹서버 돌리고 하는데, 메모리가 좀 많이 필요한 편이다.(그리고 웹서비스도 2개가 돌아간다.) 그래서 처음 세팅시 swap 을 설정해서 가상 메모리를 사용하고 있다.(이 값이 설정안되면 파이썬 라이브러리가 설치가 안되는 문제도 가끔씩 발생된다.) 어차피 테스트 서버라 속도가 좀 늦어도 상관없다. 그래도 하드가 SSD 라 꽤 괜찮은 속도를 유지하고 있는 편이다.
서버가 가끔식 먹통이 되는게 swap 이 동작하지 않은게 원인 같았다. 내 추론으로는 메모리가 부족해서 프로그램이 돌다가 엄청나게 느려지거나 sagement fault 이 발생하면서 큰 문제를 일으킨 것으로 생각하는게 맞을 것 같다. 뭐, 더 이상 문제가 발생하지 않는다면 swap 이 동작하지 않는게 원인이겠지.
어째든 찾아보니 vm.swappiness 라고 하는 설정이 있었다. 이 값으로 swap 메모리를 어떠한 비율로 사용할 것인지 결정하는 값이 있었다. 이 테스트 서버의 경우 0 으로 설정되어서 전혀 사용하지 않음으로 설정된 상태였다. (자세한 설정은 vm.swappiness 으로 검색해 보기 바란다.)
이 값을 기본값인 60으로 설정하고 나니 swap 메모리를 사용하기 시작했다.
다른 서버들을 확인해보니 이 cloud 서버들만 vm.swappiness 가 0 으로 설정되어있었다. 실제 서비스 서버는 메모리가 충분한 상태이기 때문에 변경은 필요 없어 보였다.
가끔씩 클라우드마다 다른 설정값을 보이는 경우가 있다. 내 생각에는 클라우드마다 ubuntu 서버를 수정해서 배포하는 것 같다. 그러다보니 여러 클라우드를 사용하다보면 좀 다양한 현상을 겪게 된다.
어째든 이번일은 이것으로 마무리 되고 더 이상 문제가 안 생기기를 바란다.