프로세스의 USS를 얻는 방법

프로세스의 USS를 얻는 방법

내가 아는 한 VSS RSS PSS와 USS 등 여러 가지 메모리 개념이 있습니다. 여기서 USS(고유 세트 크기)는 프로세스 전용 물리적 메모리입니다(필요한 경우 수정해 주세요).

어떤 프로세스가 물리적 메모리를 너무 많이 사용하고 있는지 알려주는 데 매우 유용한 값이 되어야 한다고 생각합니다.

그런데 이 값을 어떻게 얻을 수 있을까요? ps를 통해 또는 /proc 파일을 통해?
(smem 도구가 도움이 될 수 있다는 것을 알고 있지만 내장된 방법이 있습니까?)

20231015 업데이트

이 답변/proc/<pid>/smaps_rollup에 합계 값이 있다고 언급했습니다.

grep "Private" /proc/1748/smaps_rollup 
Private_Clean:     55700 kB
Private_Dirty:     67628 kB
Private_Hugetlb:       0 kB

따라서 전체 값을 얻을 수 있습니다.

awk '/Private/{ sum += $2 } END { print sum }' /proc/1748/smaps_rollup

답변1

정답은/proc/pid/smaps에서 프로세스 메모리 사용량에 대한 정보 얻기이를 수행하기 위한 지침이 포함되어 있습니다. 구체적이고 정확한 명령을 제공하지는 않지만 USS적용되는 명령을 제시하는 데 필요한 모든 정보와 예를 제공합니다 USS.

  • RSS(대략 + ) 의 항목을 합산하여 얻을 수 있습니다 (공유/개인 공유/더티 항목을 합산할 필요는 없음).Rss:smaps

      awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    

[...]

  • USS에는 보고되지 않았지만 smaps실제로는 비공개 지도의 합이므로 같은 방법으로 얻을 수도 있습니다.

따라서 USS비공개 맵의 합계인 경우 summing 과 동일하지만 RSS모든 행에 대해 합산하는 대신 Rss:모든 비공개 맵에 대해 합산합니다( /Private/대신 /Rss:/).

awk '/Private/{ sum += $2 } END { print sum }' /proc/$$/smaps

관련 정보