전공영역 공부 기록

리눅스에서 tmp 디렉터리가 메모리 사용률을 올리는 이유

악분 2026. 3. 1. 22:13
반응형

 

들어가며

이 글은 리눅스 운영체제에서 /tmp 디렉터리가 메모리에 미치는 영향에 대해 설명합니다.

 

요약

  • /tmp 디렉터리의 파일시스템이 tmpfs이면, /tmp에 파일을 쓸 때 디스크가 아닌 메모리를 사용한다.
  • /tmp에 큰 파일을 쓰면 shared memory와 buff/cache가 증가하여 메모리 사용률이 급격히 올라간다.
  • systemd-tmpfiles-clean.timer 데몬이 /tmp 디렉터리를 주기적으로 정리해준다.

 

tmpfs 파일시스템을 사용하는 /tmp는 메모리를 사용한다

/tmp 디렉터리의 파일시스템이 tmpfs로 되어 있다면, 메모리 모니터링과 메모리 알람에 대해 신경을 써야 합니다. tmpfs 파일시스템은 작업을 디스크에 하는게 아니라 메모리에 하기 때문입니다.

 

리눅스의 /tmp 디렉터리는 임시 디렉터리 목적으로 많이 사용합니다. 리눅스 패키지 설치과정에서 필요한 파일을 /tmp 디렉터리에 저장하거나, 임시 파일이 필요한 경우 /tmp 디렉터리를 사용합니다.

 

만약 /tmp 디렉터리의 파일시스템이 tmpfs라면, /tmp 디렉터리에 큰 파일을 쓰는 경우 메모리 사용률이 올라갑니다. 파일 크기만큼 shared memory가 올라가고, I/O가 발생할 때마다 buff/cache 메모리가 증가합니다.

 

실습

이 내용이 정말 맞는지 직접 확인했습니다.

 

실습방법

메모리 2GB를 갖는 ubuntu 컨테이너에서, 256MB씩 파일을 계속 생성했습니다. dd 명령어로 파일을 생성했습니다.

docker exec tmpfs-lab bash -lc 'mkdir -p /tmp/tmpfs-memory-manual'
for i in 1 2 3 4 5 6; do
  docker exec tmpfs-lab bash -lc "dd if=/dev/zero of=/tmp/tmpfs-memory-manual/chunk_${i}.bin bs=1M count=256 conv=fsync status=none"
  docker exec tmpfs-lab free -mh
  docker exec tmpfs-lab grep -E "MemTotal|MemAvailable|Shmem|Cached" /proc/meminfo
  sleep 15
done

 

모니터링 방법

프로메테우스로 cgroup 메트릭을 수집하여 컨테이너 메모리 사용률을 측정했습니다. 그리고 쉘에서 free 명령어와 /proc/meminfo를 확인했습니다.

$ free -mh
$ grep -E "MemTotal|MemAvailable|Shmem|Cached" /proc/meminfo

 

실습결과

shared memory가 증가하면서 메모리 사용률, buff/cache도 같이 증가했습니다. 또한, available 메모리도 감소했습니다.

 

컨테이너 메모리 사용률은 우상향했습니다.

 

/tmp 디렉터리의 파일을 삭제하면 컨테이너 메모리 사용률이 줄어듭니다.

rm -rf /tmp/*

 

/tmp 디렉터리를 주기적으로 삭제하는 systemd-tmpfiles-clean.timer 데몬

/tmp 디렉터리에 파일이 계속 남아있으면, 불필요하게 메모리를 많이 사용합니다. 그래서 주기적으로 /tmp 디렉터리를 정리하는 데몬이 있습니다. 데몬 이름은 systemd-tmpfiles-clean.timer입니다.

sudo systemctl status systemd-tmpfiles-clean.timer

 

데몬 설정은 tmp.conf 파일에 따릅니다. 아래는 AL2023 리눅스의 기본 설정입니다. 이 설정은 /tmp 디렉터리를 10일마다 삭제합니다. 또한, 시스템이 재부팅되면 /tmp 디렉터리 파일을 삭제합니다.

cat /usr/lib/tmpfiles.d/tmp.conf

반응형