어느날 갑자기 서버 연결이 안된다.
이 페이지에 연결할 수 없음이라는 메세지가 뜨고 멍통이 되어버린다.
뭐가 문제일까? 터미널에 접속해 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 명령을 사용했다. 그랬더니 메모리 할당을 못한다고 한다..
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로 업그레이드한 상태인데 물리적인 메모리 부족이 맞는 것인지 의문이 들었다.
Table of contents
목차 보이기
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 크기에 맞추어 최적화하면서 설정 크기를 줄일 수 있다
너무 어이가 없긴한데 혹 헤멜 분을 위해서 공유해 본다.