현재 서버 사양 입니다.
CPU Core : 4개
Ram : 4GB
HDD : 200GB
Nginx, MySQL[InnoDB],php7.0, 그누보드5[아미나 빌더]
최적화 작업 : Nginx - X ,MySQL[InnoDB] - X ,php7.0 - X
현재 저희 사이트는 평균 동접 400명대, 피크타임 평균 동접 800명대 입니다.
1시간전에 접속자 수가 810명대로 증가하더니 갑자기 서버에 렉이 걸리기 시작하면서 서버가 터지려고 했습니다.
0.8초만에 로딩되던 페이지가 7초씩 걸리고, 엄청 오래 기다린후에 로딩이 완료되었습니다.
처음에는 회선 문제 인가 싶었지만,
아무리 봐도 회선문제는 아니어서 서버를 재부팅하였더니, 렉이 걸리지않고 정상적으로 작동하였습니다.
그 당시 서버의 Load average는 2.47 2.67 2.78 이었습니다.
램 사용량은 490mb 였습니다. [htop 명령어를 통해 확인하였습니다.]
서버는 6일전 재부팅한것을 제외하고는 재부팅을 한 적이 없습니다.
일단 임시적으로 crontab을 이용해 매일 05:30마다 재부팅을 하게 해놨는데, 대체 무슨 문제인지 모르겠습니다.
제가 더 알려드려야할 정보가 있으시면 덧글로 말씀해주세요.
해결책 알려주시면 감사하겠습니다.
가상서버에 4코어/4GB/200GB 사양이라면 스쿨호스팅인가요? ㅎㅎ
우선 램 사용량이 너무 낮습니다. 특히 InnoDB라면 기본으로 1기가는 먹고 들어가곤 하는데,
4기가 중 490메가밖에 사용하고 있지 않다면 MySQL 설정에 문제가 있는 듯 합니다.
우선 my.cnf에서 innodb_buffer_pool_size를 1G 이상으로 높이고 MySQL을 재시작해 보세요.
(단, 그누보드는 게시판을 추가하면 무조건 MyISAM으로 테이블을 생성하는 습성이 있기 때문에
실제로 모든 테이블이 InnoDB로 되어 있는지 확인하셔야 합니다. 그렇지 않다면 위의 설정은 무의미해요.)
접속자가 많아질 시간대에 htop에서 PHP-FPM 프로세스가 몇 개 떠있는지도 확인해 보세요.
리눅스 종류에 따라서는 기본값이 5개로 제한되어 있어서 접속자가 늘어나면 감당을 못하기도 합니다.
4코어 CPU에 램이 4기가라면 PHP-FPM 프로세스는 10~20개 정도 떠있어도 됩니다.
서버 소프트웨어 튜닝이 필요한 이유가 바로 이런 것들입니다.
CPU와 램을 아무리 많이 달아놔도 PHP와 MySQL이 그걸 제대로 활용하도록 설정되어 있지 않으면
몇만원짜리 서버를 임대해 놓고도 몇천원어치 사양밖에 못 쓰는 불상사가 발생합니다.