네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형
kill -9로 종료하는 것은 좋지않다. jvm shutdown hook 또는 spring의 @PreDestroy의 실행을 보장하기 힘들다. kill -2(SIGINT) 혹은 kill -15(SIGTERM)을 쓰는 것이 좋다.

kill 명령어와 Graceful Shutdown에 대해서 알아보고자 한다.

 

 kill 명령어 알아보기 

https://frogand.tistory.com/69

 

[Linux] ps 명령어 / kill 명령어 / 프로세스 확인 및 죽이기 / 프로세스 일괄 종료 / kill process

# 프로세스란? 실행중인 프로그램 # ps 명령어 - Process 와 관련 linux 명령어는 ps 입니다. 옵션 기능 -e 시스템 상의 모든 프로세스 정보를 출력 -f 상세한 정보를 출력 (full-format) $ ps -ef UID PID PPID C..

frogand.tistory.com

 

애플리케이션 구동도 중요하지만, 안전한 종료야 말로 신규 버전을 배포하기 위해 필수적으로 진행해야 한다. 

 

Graceful Shutdown이란?

프로그램이 종료될 때, 최대한 side effect없이 로직을 잘 처리하고 종료하는 것을 의미한다.

지속가능한 소프트웨어를 위해 폐기 가능한(Disposability) 시스템을 구성해야 한다. 그리고 소프트웨어의 안전성을 높이기 위하여 graceful shutdow이 필요하다. 프로세스가 갑작스러운 하드웨어 문제에 의해 죽는 상황이 발생하더라도 문제가 없는 견고한 프로그램을 만들어야 한다. 프로그래머는 이를 준비해야 한다. (The Twelve-Factor App 방법론)

 

SIGTERM, SIGKILL 차이점

kill -9 $PID는 강제종료이다. -9인 SIGKILL은 리소스를 정리하는 핸들러를 지정하지 않고 프로세스를 바로 죽인다는 의미이다. 만약, 실행 중인 쓰레드가 있더라도 이를 무시하고 중단하는데 혹시라도 굉장히 중요한 작업중이라면 최악의 상황이 일어날 수 있기 때문이다.

 

 

Spring boot에서는 actuator를 사용해서 graceful shutdown을 할 수 있다.

 

 참고자료 

https://blog.marcosbarbero.com/graceful-shutdown-spring-boot-apps/

 

Graceful Shutdown Spring Boot Applications

This guide walks through the process of graceful shutdown a Spring Boot application. The implementation of this blog post is originally created by Andy Wilkinson and adapted by me to Spring Boot 2. The code is based on this GitHub comment. Introduction A l

blog.marcosbarbero.com

https://heowc.dev/2018/12/27/spring-boot-graceful-shutdown/

 

Spring Boot - 안전하게 종료시키기 | 허원철의 개발 블로그

Spring Boot를 안전하게 종료시키는 방법에 대한 소개이다.

heowc.dev

https://kapentaz.github.io/spring/Spring-Boot-Actuator-Graceful-Shutdown/#

 

Spring Boot Actuator Graceful Shutdown

Spring Boot 환경에서 application을 shutdown 하는 방법 중 대표적인 것이 actuator의 shutdown endpoint 기능을 이용하는 것입니다. 이 endpoint는 예상과 달리 처리 중인 요청이 있더라도 그냥 shutdown 처리를 합니

kapentaz.github.io

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !