본문 바로가기

개발

테스트 서버 장애 처리 과정

잊지 않기 위해 포스팅한다.




문제 상황

테스트 2번 서버 (웹 서버)가 disk full 로 주키퍼와 스톰 supervisor, web 서버 죽음. 

그래서 수집이 멈춘 상태 였음.


해결 실패

2일 후 disk full 을 해결하고 주키퍼, 스톰, 톰캣을 다시 띄웠으나 여전히 수집이 안됨.


문제 해결

문제점 1 : knowledge_history 테이블에 12월 20일 까지만 파티션을 만들어 놓은 상태였음.

오늘 21일자 파티션이 없어서 insert 에러남. (파티션을 아예 생성 안했을 때는 전체를 하나의 파티션으로 인식한다.)

문제점 2 : 톰캣 메모리 설정이 안되어 있었음. 서버 메모리가 8G 라서 일단 4G로 설정해서 재식작함.

(톰캣은 디폴트 메모리 설정이 안되어 있으니 설정해서 사용할 것!)


mysql에 insert가 안되서 web이 (설정되어 있는 횟수인) 5번씩 retry를 함. 그 이후에도 안되면 다음 요청으로 넘어가는데 bolt가 던져준 20개가 5회 retry 하는 동안(1초 sleep이라 5초) bolt는 또 20개를 던져주고... 

이렇게 하다보면 retry 후 넘어가는 프로세스 수 보다 쌓이는 프로세스 수가 더 많음.

그래서 270여개가 쌓여 있었음.


tomcat은 너무 많이 쌓인 프로세스로 인해 정상 동작하지 않음.

그래서 톰캣 재시작 후 처음에는 api 에 접속이 되던것이 나중에는 접속이 안됨. 웹에 문제가 생긴 것임.


해결 방법

1. topology를 deactivate 한다. : 입력을 받지 않는다.

2. tomcat을 멈추고 mysql 테이블에 파티션을 생성한다.

3. 웹서버에 남아있는 프로세스가 없어질 때까지 기다린다.

4. tomcat 시작.

5. 웹서버의 프로세스 수를 관찰. bolt가 20개라서 20개 이하여야 한다. (한번에 처리할 수 있는 수가 20인데 그 이상이면 계속 쌓임) : netstat -an | grep '8080' | wc -l