반응형
회사 프로젝트에서 사용하고 있는 톰캣서버에서 ps 명령어로 톰캣의 프로세스를 조회하다 아래와 같은 상황을 발견했다.
어떠한 이유에서인지 서버는 종료되었으나 프로세스는 종료되지 않고 남아 여러개의 톰캣 프로세스가 쌓여있는 상태이다.
프로세스가 여러개 올라가 있어도 서버는 정상적으로 실행되고 있었으나 나중에 문제가 발생할 가능성이 있기에 종료되지 않은 프로세스들은 정리해주기로 했다.
명령어
kill -9 `ps -ef | grep java | grep tomcat | awk '{print $2}'`
- kill -9 [PID] : 프로세스의 PID로 해당 프로세스를 강제종료
- 백틱( ` ) : 백틱안의 명령어를 실행한 출력값을 사용
- ps -ef : 모든 프로세스를 full format으로 출력
- 파이프라인( | ) : 파이프라인 앞 명령어의 결과값을 뒤 명령어의 입력값으로 사용
- grep [문자열] : 입력받은 내용에서 특정 문자열을 포함하고 있는 라인을 출력 ( grep -v [문자열] 옵션을 이용하여 제외할 문자열도 추가 가능 )
- awk '{print $2}' : 입력받은 데이터에서 공백으로 구분된 필드들 중 두 번째 값(PID)을 출력
마침 서버의 연결상태를 확인하여 서버가 정상적으로 응답하지 않는 경우 tomcat을 재시작하는 스크립트를 작성 중이였는데 서버를 종료할 때에 이 과정을 추가하여 혹시 서버가 종료되었을 때 정리되지 않은 프로세스들도 정리할 수 있도록 처리하였다.
Tomcat 종료 및 프로세스 정리 후 재실행
실행시킨 프로세스 하나만 남고 깔끔하게 정리가 되었다.