Linux에서 사용자 공간 프로세스가 사용하는 총 메모리 양을 측정하는 방법은 무엇입니까?

Linux에서 사용자 공간 프로세스가 사용하는 총 메모리 양을 측정하는 방법은 무엇입니까?

Linux에서 사용자 공간 프로그램에 할당된 총 메모리 양을 측정하는 방법은 무엇입니까? 이는 실제 메모리에서 사용자 공간 프로그램이 소유한 모든 메모리 페이지의 크기입니다.

/proc/meminfo이 정보는 제공되지 않는 것 같습니다.

rss현재 모든 프로세스에 대한 필드를 추가하고 있지만 /proc/$pid/stat공유 메모리 페이지는 고려하지 않습니다.

고쳐 쓰다:"사용자 공간"이란 루트(커널 공간 아님)를 포함하여 모든 사용자가 실행하는 프로세스를 의미합니다.

답변1

사용smem교환하지 않고 공유 메모리를 두 번 계산하지 않고 모든 사용자 메모리의 총계를 표시합니다.

sudo smem -c pss -t | tail -1

내 시스템의 출력:

4119846

확장하다:

  • -c pss이 경우에는 열을 선택하세요.PSS. 에서 man smem:

          smem reports physical memory usage, taking shared memory  pages
          into  account.   Unshared memory is reported as the USS (Unique
          Set Size).  Shared memory is divided evenly among the processes
          sharing   that  memory.   The  unshared  memory  (USS)  plus  a
          process's proportion of shared memory is reported  as  the  PSS
          (Proportional Set Size).  The USS and PSS only include physical
          memory usage.  They do not include memory that has been swapped
          out to disk.
    
    • -t보여줍니다모두또는 마지막으로 사용된 모든 PSS의 합계를 구하고 tail -1이전 데이터를 제거합니다.

합계만 표시공유되지 않음사용자 메모리는 -c pss다음으로 대체됩니다 -c uss.

sudo smem -c uss -t | tail -1

산출:

 3874356 

위의 PSS 총계는 다음에 표시된 숫자와 거의 동일합니다.행 5, 열 2여기:

smem -w

산출:

Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       1367712    1115708     252004 
userspace memory            4112112     419884    3692228 
free memory                  570060     570060          0 

답변2

다음은 어떤 프로세스가 얼마나 많은 스왑 및 PID를 사용하는지 보여주기 위해 사용하는 한 줄의 코드입니다.

for file in /proc/*/status;
do
    awk '/VmSwap|Tgid|Name/ {printf "%s %s %s", $2, $3, $4} END { print "" }' "$file";
done | sort -k 3 -n -r | head -20

(가독성을 높이기 위해 여러 줄로 나누었습니다. 한 줄로 만들고 싶다면 모든 줄을 연결하면 됩니다.)

관련 정보