# go 서버(k8s pod)에 multipart 형식으로 파일을 업로드하면 context.multipartfrom() 에서
# /tmp 위치에 multipart-3000453554 등의 이름으로 임시파일을 생성하게 된다.
# 여러 linux 배포판에서 disk IO 를 줄이기 위해 /tmp 는 디폴트로 tmpfs(RAM based) 파일시스템을 사용한다고 한다.
# 사용한 리눅스 배포판은 Debian GNU/Linux 9 (stretch) 이다.
# 그런데 df, mount, findmnt 명령에는 /tmp 마운트(파일시스템) 정보가 보이지 않는다.
# 파일 업로드를 진행하면
# /tmp/multipart... 파일이 점점 커지면서
watch -n 1 ls -ahl /tmp
# free 는 점점 줄어 들고 있는것 처럼 보인다.
# -s: repeat printing every N seconds
# -w: wide output
# -m: show output in mebibytes
free -s 1 -w -m
# /tmp 사용량을 보면 mounted on / 정보가 나온다.
# 이는 disk 를 사용하고 있다는 얘기다.
# 메모리 뿐만 아니라 / 의 disk 용량도 줄어들고 있는것이 확인된다.
watch -n 1 df -m /tmp
# 다시 free 결과를 보면 cache(pages with actual contents of files or block devices) 용량이 증가한다.
# 예전 free 관련에서 정리한 포스팅을 다시 참고해보면
# cache 의 목적은 최근 자주 사용되는 데이터를 메모리에 보관하여 재사용시 디스크까지 가서 않고 메모리에서 빠르게 액세스/로딩을 위해 사용된다.
# cache 사용량이 증가했지만
# 가용메모리 = free + buffers + cached 로 사용할 수 있는 메모리가 줄어든것이 아니였다.
# 실제로 kubectl top 로 보면 메모리 사용량은 증가하지 않았다.
# kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl top pod -n my-namespace
# 결론... /tmp 는 디스크를 사용하고 있었다.