[Airflow] Negsignal.SIGKILL

bradley·2023년 3월 28일
1

Trouble Shooting

목록 보기
11/12

현상


Task를 실행할 때 Negsinal.SIGKILL이란 Log를 발생시키며 Task fail이 난다.

{local_task_job.py:159} INFO - Task exited with return code Negsignal.SIGKILL

원인 파악


이 경우 Memory 문제라고 한다.
Task가 Airflow Worker에 할당된 Memory보다 더 많이 사용하기 때문에 발생한다고 한다.
따라서 해결 방법은 단순하다. Memory 사양을 올리면 된다.


여담으로 필자의 Case는 다음과 같다.

서버 사양

현재 AWS EC2 Airflow Cluster에 Worker가 2개가 구성되어 있는데, 2 GiB Memory를 가진 t2.small로 구성되어 있다.

시나리오

실행할 DAG는 400MB 대의 파일과 500 MB가 넘는 파일을 각각의 Worker의 Memory에 다운받고 S3에 업로드하는 DAG이다.

요런 느낌

  • Worker1 : 400MB 대 데이터 다운로드 & 업로드
  • Worker2 : 500MB 대 데이터 다운로드 & 업로드

Worker는 DAG 실행시마다 자동 할당되어서 담당 Worker가 바뀌는데,
500MB 이상의 데이터 다운로드 & 업로드하는 Task를 할당받는 Worker가 계속 fail 난다.

그래서 Worker에서 free 명령으로 Memory 사용량을 계속 체크를 해봤다.

기본 Memory 상태

이미 2 GB를 가진 Worker의 절반을 Task 실행 전에 이미 잡아먹고 있었다.
아마 systemctl로 서비스 자동 실행을 등록한 airflow, github actions runner 등의 프로세스들이 Memory를 잡아 먹고 있나보다.

DAG 실행 중 Memory 상태

파일을 다운로드 받는 중 400~500M 대까지 유휴 메모리가 남았는데도, 버티지 못하고 Task가 fail 났다.
fail 이후 다시 Memory 유휴량이 1.2G으로 증가하였다.
1.2G에서 넉넉잡아 600M 파일을 다운받는데 추가적으로 600M는 더 든 샘처럼 보인다.
생각보다 Airflow가 Memory를 많이 잡아먹나보다..

해결


결국 Memory 사양을 올리면 된다.
Worker의 인스턴스 유형을 t2.smallt2.medium으로 올렸다.



내용 업데이트 (2023.4.6)


Memory가 충분히 남는데도 Negsinal.SIGKILL 에러가 난다면 DAG 설계 문제도 의심해보아야 한다.
무거운 Library를 사용한다거나, 대용량 처리를 비효율적으로 한다거나 등이 원인이 될 수 있다.
따라서, Negsinal.SIGKILL 에러가 해결되지 않는다면 DAG 최적화에 대해 고려해보자.

아래 포스팅 참고 바람
https://velog.io/@jskim/Airflow-Task-Memory-최적화하기

profile
데이터 엔지니어링에 관심이 많은 홀로 삽질하는 느림보

0개의 댓글