레이블이 free인 게시물을 표시합니다. 모든 게시물 표시
레이블이 free인 게시물을 표시합니다. 모든 게시물 표시

linux disk or memory /tmp directory

# 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 는 디스크를 사용하고 있었다.

Linux free 명령으로 가용메모리 볼때 유의사항

[용도에 따른 메모리 영역]
wired 는 시스템이 필요로 하는 메모리로 스왑이나 캐시되지 않고 항상 메모리에 상주하고 있어야 한다.
shared 는 1개 이상의 프로세스가 공유하는 메모리로 공유 메모리를 통해 불필요한 메모리 중복을 막고 프로세스간 통신을 위해 사용된다.

buffer 는 data structure, meta info 등을 저장하는 공간으로 파일의 위치, 퍼미션, 날짜등의 inode 데이터가 된다.

cache 는 페이지, 파일, 패킷등의 실제 데이터 덩어리로 볼 수 있다. cache 의 목적은 최근 자주 사용되는 데이터를 메모리에 보관하여 재사용시 디스크까지 가서 않고 메모리에서 빠르게 액세스/로딩을 위해 사용된다.

리눅스에서는 현재 사용중이지 않는 데이터를 buffer 나 cache 로 저장하고 있다.

buffer 나 cache 는 os 가 사용하다가 어떤 프로세스가 실행되어 가용메모리(free)보다 많은 메모리를 필요로 할때 가용메모리로 바뀌게 된다.

따라서 실제 가용메모리 = free + buffers + cached 가 된다.


[예시]

아래는 free 명령을 실행한 결과이다.

전체 4037208KB 메모리중 3438984KB 가 사용되고, 가용메모리(free)는 598044KB 밖에 안되는 것처럼 보이지만

바로 아래줄에 -/+ buffers/cache 를 고려할 경우 사용중인 메모리는 1484256KB 이고 가용메모리는 2552772KB 이 된다.

즉 가용메모리 2552772KB = 598044KB(free) + 96392KB(buffers) + 1858336KB(cached) 가 된다.




[참고] 
free -t 로 total 파악할 수 있다.
또는

cat /proc/meminfo

또는

vmstat -w
을 사용하면

active: 실행 중인 프로세스가 사용중인 메모리

inactive: 실행 중이 아닌 프로세스가 점유하고 있는 메모리

를 확인 할 수 있다.