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 사용량을 계속 체크를 해봤다.

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

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


Memory가 충분히 남는데도 Negsinal.SIGKILL 에러가 난다면 DAG 설계 문제도 의심해보아야 한다.
무거운 Library를 사용한다거나, 대용량 처리를 비효율적으로 한다거나 등이 원인이 될 수 있다.
따라서, Negsinal.SIGKILL 에러가 해결되지 않는다면 DAG 최적화에 대해 고려해보자.
아래 포스팅 참고 바람
https://velog.io/@jskim/Airflow-Task-Memory-최적화하기