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