어느날 갑자기 서버 연결이 안된다.
이 페이지에 연결할 수 없음이라는 메세지가 뜨고 멍통이 되어버린다.

이 페이지에 연결할 수 없음

뭐가 문제일까? 터미널에 접속해 nginx를 다시 가동해 보기로 한다.
아쉽게도 메세지는 부정적이다.

root@happist:~# service nginx restart

Job for nginx.service failed because the control process exited with error code.
See "systemctl  status nginx.service" and "journalctl  -xe" for details.

그래서 시킨대로 systemctl status nginx.service 명령을 사용했다. 그랬더니 메모리 할당을 못한다고 한다..

nginx 에러 메모리 할당 오류

root@happist:~# service nginx start
Job for nginx.service failed because the control process exited with error code.
See "systemctl  status nginx.service" and "journalctl  -xe" for details.
root@happist:~# systemctl  status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2018-02-04 04:47:54 KST; 19s ago
     Docs: http://nginx.org/en/docs/
  Process: 16414 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 16963 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
 Main PID: 319 (code=exited, status=0/SUCCESS)
      CPU: 28ms

Feb 04 04:47:54 happist systemd[1]: Starting nginx - high performance web server...
Feb 04 04:47:54 happist nginx[16963]: nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 805306368) failed (12: Cannot allocate memory)
Feb 04 04:47:54 happist systemd[1]: nginx.service: Control process exited, code=exited status=1
Feb 04 04:47:54 happist systemd[1]: Failed to start nginx - high performance web server.
Feb 04 04:47:54 happist systemd[1]: nginx.service: Unit entered failed state.
Feb 04 04:47:54 happist systemd[1]: nginx.service: Failed with result 'exit-code'.

구글링읗 해보니 메모리의 부족이나 상위 플랜으로 업그레이하라는 이야기 많이 나온다.

조금 이상하기도하다. 그 동안 1GB메모리 사용시에도 아무런 문제가 없었고 지금은 2GB로 업그레이드한 상태인데 물리적인 메모리 부족이 맞는 것인지 의문이 들었다.

SWAP 파일 생성으로 해결

그동안 내가 했던 조치들을 반추해 보았다.

  • 최근 swap 파일을 사용하지 않도록 해던 게 생각이 났다.
  • 나름 빠른 SSD지만 RAM에 비해서는 속도가 느리므로  swap 파일은 속도에 지장을 준다.
  • 메모리가 적으면 문제가 없겠지만, 2GB로 업그레이드하면서 조금 여유 메모리가 있으니 swap을 사용하지 않토록 했었다.
  • 아마 이게 문제가 되었나 보다.

그래서 swap를 사용토록 해주었던 모든 문제가 해결 되었다. 아무래도 메모리가 2GB라도 적은가 보다.

SWAP 사용하지말고 메모리 사용을 조정해 보자

위 방법은 메모리 사용을 조정 불가 時 적용할 수 있는 방업이라 할 수 있다. 그래서 속도가 조금 늦어지드라도 SWAP 파일을 사용할 수 있도록 만드는 방법이라 할 수 있다.

그러나 굳이 SWAP 파일을 사용하지말고 메모리 사용을 최적화는 방법도 좋을 것이다.  메모리를 4GB로 올리고 나서도 여전히 이런 메모리 부족 현상을 겪었다. 

또  SWAP 파일을 만들어야하나하는 고민도 있었지만 메모리 문제이니 메모리 사용을 조정하기로 했다.

  • mysql설정 파일에서 max_connections을 150개 정도로 줄였다. 어자피 150명 동시 접속도 쉽지않은 현상이니 무리는 없을 것으로 보았다. 그러면 줄어든 만큼 여분으로 챙겨야하는 메모리가 줄어 든다.
  • table_open_cache와 같은 cache 크기를 줄인다.
  • ie도 DB 크기에 맞추어 최적화하면서 설정 크기를 줄일 수 있다

너무 어이가 없긴한데 혹 헤멜 분을 위해서 공유해 본다.