
윈도우서버 CPU 100% 원인
모바일앱 서비스중 윈도우 서버 CPU가 100%가 되어 클라이언트 로딩 및 통신하는데 렉이 발생하는 일이 생겼다.
원인이 무엇일까? 원인 파악부터 해보았다.
1. php로 개발한 API 파일에 문제가 있는 것일까?
자주 호출되는 API 중 쿼리문에 문제가 있다고 판단하여 쿼리튜닝을 했다. 불필요한 쿼리문 삭제 및 조인을 이용하여 최적화를 시켰지만 똑같은 현상이 발생했다. ㅠ
2. 서버 환경설정 문제인가?
my.ini 파일에 동시접속자수 관련된 설정을 추가 하고 서버 재실행 했지만 CPU 100%. OTL
[mysqld]
max_connections = 500
wait_timeout = 60
3. mysql console에 현재 실행중인 프로세스 검사
CPU 100%인 상태에서 mysql consloe 창을 열어 명령어를 입력한다.
show processlist;
우리는 CPU 100%인 상태에서 동일한 쿼리문 2가지가 계속해서 발생하는 것을 알았고 쿼리문을 다시 수정했다. 하지만 똑같은 현상이 발생했다. 동일한 쿼리문의 공통점은 select * from 으로 데이터 값을 가져와서 비교하는 쿼리문으로 데이터베이스 상태를 체크하였는데 레코드수가 200만 정도로 쌓인것을 확인하였다.
결국 원인은 select 문을 사용하는 쿼리의 데이터베이스 레코드수 문제였다.
기존 데이터베이스 레코드수를 삭제하고 서비스에 필요한 데이터베이스는 새로 생성하여 보여주는 식으로 바꾼 결과 지금은 CPU가 30%도 차지 않는 상태이다. 속도는 LTE급으로 안정된 상태이다.
결론
어느순간 CPU 100%가 발생한다면 mysql console로 현재 실행중인 프로세스를 파악한다.
특정 쿼리문이 계속해서 노출된다면 쿼리문 튜닝과 함께 데이터베이스 레코드수를 확인한다.