Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

리눅스 프로세스 메모리 확인시 유의사항 #258

Open
eubnara opened this issue Jan 7, 2022 · 3 comments
Open

리눅스 프로세스 메모리 확인시 유의사항 #258

eubnara opened this issue Jan 7, 2022 · 3 comments

Comments

@eubnara
Copy link
Owner

eubnara commented Jan 7, 2022

https://unix.stackexchange.com/questions/34795/correctly-determining-memory-usage-in-linux

free -m 에서 메모리 사용량 합과 top 결과의 RES 합이 다를 수 있다.

  1. 프로세스를 fork 하면, 부모, 자식 프로세스는 같은 RES 를 나타내는데 실제로는 같은 메모리를 쓰고 있다. top 에서는 이를 그냥 각각 표현한다. 무언가 변경이 있을 때만 복제하고 변경한다. (Copy On Write) 이 때문에 free 에서 사용중인 메모리 합이 top 결과의 RES 단순 합보다 작아질 수 있다.
  2. RSS 값은 shared mem. 이 나오지 않는다. shared mem. 은 한 프로세스에 속하지 않아 top 명령어에서 이를 RSS 에 포함시켜 표현하지 않는다. 1번과 반대로 free 에서 사용중인 메모리 합이 top 결과의 단순 합보다 커질 수 있다.

여러가지 이유가 있기 때문에 단순합으로만 계산해서는 안된다.

@eubnara
Copy link
Owner Author

eubnara commented Jan 7, 2022

https://stackoverflow.com/questions/15907807/linux-rss-from-ps-res-from-top

ps aux 명령의 결과에서의 RSS 와 top 명령의 RES 는 같다.
/proc/$(pidof process)/stat 에서 읽어온 내용이다.

cf

  • /proc/$(pidof process)/status 를 보면 사람이 읽기 좋게 표현해준다.
  • RES : Resident size
  • RSS: Resident Set Size

@eubnara
Copy link
Owner Author

eubnara commented Jan 7, 2022

❯ cat test-fork.py 
import os
import time

pid = os.fork()

if pid :
    print('I am Parent Process(PID: %s), My Child Process(PID: %s)' % (os.getpid(), pid))
    time.sleep(600)
else :
    print('I am Child Process(PID: %s), My Parent Prcess(PID: %s)' % (os.getpid(), os.getppid()))
    time.sleep(600)
❯ ps aux | grep -E '(15886|15887)'
eub        15886  0.0  0.0  16208  8528 pts/4    S+   13:28   0:00 python3 test-fork.py
eub        15887  0.0  0.0  16208  4756 pts/4    S+   13:28   0:00 python3 test-fork.py

❯ top -p 15886 -p15887

top - 13:30:34 up  1:12,  2 users,  load average: 0.68, 0.54, 0.59
Tasks:   2 total,   0 running,   2 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.8 us,  1.1 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  13838.3 total,   7014.5 free,   3237.1 used,   3586.7 buff/cache
MiB Swap:  15298.2 total,  15298.2 free,      0.0 used.  10202.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                
  15886 eub       20   0   16208   8528   5876 S   0.0   0.1   0:00.00 python3                                                
  15887 eub       20   0   16208   4756   2104 S   0.0   0.0   0:00.00 python3  

❯ cat /proc/15886/smaps | grep Rss | awk '{sum += $2} END {print sum}'
8592


❯ cat /proc/15887/smaps | grep Rss | awk '{sum += $2} END {print sum}'
6004

@eubnara eubnara added the memory label Jan 7, 2022
@eubnara
Copy link
Owner Author

eubnara commented Jan 7, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant