TIL

proxy_temp 파일이 날뛰어서 디스크 꽉 찼던 사건 정리

하얀잔디 2025. 11. 18. 19:44

최근에 서버 디스크가 갑자기 꽉 차는 이슈가 있었음.
처음엔 “누가 또 큰 파일 던졌나?” 싶었는데 확인해보니 proxy_temp 디렉토리가 범인이었음.

 

 

🔍 원래 proxy_temp가 어떤 역할이냐면

  • 클라이언트에게 파일 전송할 때 nginx가 임시로 파일을 저장하는 곳임
  • 다운로드가 끝나면 바로 삭제되는 게 정상임
  • 즉, 보통 여기에 오래 남는 파일은 없어야 함

 

❗ 그런데 이번엔 비정상 상황 발생함

  • 다운로드가 중간에 끊기거나
  • nginx worker가 파일 FD(파일 디스크립터)를 놓지 않는 상태가 됐던 듯함
  • 즉, FD 누수(File Descriptor leak) 발생했음
  • 그래서 삭제가 안 되고 계속 쌓임

 

 

📌 실제로 어떤 일이 벌어졌나

  • proxy_temp 아래에 70MB짜리 파일이 수십 개씩 생김
  • 심지어 삭제된 걸로 보이는데 실제로는 프로세스가 핸들을 붙잡고 있어서 물리 디스크에서 안 빠짐
  • 결과적으로 디스크 사용량이 계속 올라감

 

 

🔧 해결된 계기

  • 서비스 업데이트하면서 nginx 프로세스가 재시작됨
  • 그 순간 worker가 붙들고 있던 FD가 해제됨
  • 그제서야 proxy_temp 파일이 정상적으로 “진짜 삭제”됨
  • 즉, nginx 재시작이 FD를 털어낸 셈

 

 

🤔 왜 이런 FD 누수가 났을까

  • 이번 설정에서 nginx 버퍼링이 꽤 크게 잡혀 있었음
  • 버퍼링 때문에 proxy_temp로 많이 쏟아졌고
  • worker가 죽지 않으면 FD를 지속적으로 들고 있을 가능성이 있었음
  • 그래서 이번에 버퍼링 옵션들 최소화함 (proxy_buffering off 등)

 

 

🧩 웃긴 포인트: messagebus가 파일을 잡고 있더라?

  • lsof로 확인하니 messagebus라는 프로세스가 proxy_temp 파일을 붙잡고 있었음
  • 근데 이건 진짜 메시지 버스 문제가 아니라
  • overlay2가 middle layer에서 FD를 들고 있을 때 흔히 보이는 현상
  • overlay2가 복잡한 레이어 구조로 파일 system을 구성하다 보니
    실제 파일을 어느 프로세스가 잡고 있는지 겉으로 다르게 보일 수 있음
  • 이건 언제 한 번 제대로 구조 이해 필요함

 

 

📝 결론

  • proxy_temp는 정상적으로는 바로 삭제되는 영역
  • 비정상 종료 + FD 누수 때문에 쌓였던 것
  • nginx 재시작으로 해소
  • nginx 버퍼링은 최소로 조정 → 이후 같은 문제 확률↓
  • overlay2 레이어 구조 때문에 messagebus가 잡고 있는 것처럼 보였음