[Airflow] Negsignal.SIGKILL

bradley·2023년 3월 28일

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.small → t2.medium으로 올렸다.



내용 업데이트 (2023.4.6)


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

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

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

0개의 댓글