/ proc / pid / smaps에서 프로세스 메모리 사용량에 대한 정보 얻기


46

의 주어진 프로세스에 /proc/<pid>/smaps대해, 주어진 매핑 항목에 대해 다음은 무엇입니까?

  1. Shared_Clean
  2. Shared_Dirty
  3. Private_Clean
  4. Private_Dirty

가요 Shared_Clean+ Shared_Dirty다른 프로세스와 공유 메모리의 양을? 공유 RSS와 비슷합니까?

마찬가지로 Private_Clean+ 하나의 프로세스에만 사용할 수있는Private_Dirty 메모리의 양은 + 입니까? 개인 RSS와 같은가요?

PSS 값은 = PrivateRSS + (SharedRSS / 공유 프로세스 수)입니까?

이 링크를 읽은 후 몇 가지 질문이 더 있습니다 : LWN

이제 smaps 항목을보고있는 전체 프로세스에 대해 이야기하겠습니다.

내가 눈치가 내가 할 경우 Shared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirty마다 내가보고 한 프로세스의 RSS 얻을 프로세스에 대한 항목을 현재 smaps를 위해 ps정말 멋진 인을. 예를 들어

ps -p $$ -o pid,rss

각의 합으로 나에게 RSS의 (약) 같은 값을 줄 것이다 Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirty항목은 / proc / $$ / 현재 smaps.

그러나 전체 프로세스 에 대한 PSS 는 어떻습니까? 따라서 위의 예에서 $$에 대한 PSS를 어떻게 얻습니까? 모든 스맵 매핑에 대해 PSS 항목을 추가하고 $$에 PSS에 도착할 수 있습니까?

그리고 전체 프로세스 에 대한 USS 는 어떻습니까? 위의 예를 다시 살펴보면 $$ .. right의 모든 smaps 항목에 대해 Private_ * 항목 만 합산하여 $$에 USS에 도착할 수 있다고 생각합니다.

참고 :
PSS = 비례 세트 크기.
USS = 고유 세트 크기.

답변:


50

클린 페이지는 매핑 된 이후 수정되지 않은 페이지입니다. 일반적으로 공유 라이브러리의 텍스트 섹션은 디스크에서만 읽고 (필요한 경우) 수정하지 않으므로 공유 된 깨끗한 페이지에있게됩니다.
더티 페이지는 깨끗하지 않은 (즉, 수정 된) 페이지입니다.

개인 페이지는 해당 프로세스에서만 사용할 수 있으며 공유 페이지는 다른 프로세스에서 매핑됩니다 * .

RSS는 현재 프로세스에 매핑 된 총 공유 페이지 수입니다. 따라서 Shared_Clean+ Shared_Dirty는 RSS의 공유 부분 (즉, 다른 프로세스에도 매핑되는 RSS의 부분)이고 Private_Clean+ + Private_DirtyRSS의 개인 부분 (이 프로세스에서만 매핑 됨)입니다.

PSS (비례 공유 크기)는 설명대로입니다. 개인 페이지는있는 그대로 요약되며 각 공유 매핑의 크기는이를 공유하는 프로세스 수로 나뉩니다.
따라서 프로세스에 100k 개인 페이지, 500k 페이지가 다른 프로세스와 공유되고 500k 페이지가 4 개의 다른 프로세스와 공유 된 경우 PSS는 다음과 같습니다.

100k + (500k / 2) + (500k / 5) = 450k

추가 자료 :

프로세스 전체 합계와 관련하여 :

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

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Pss:process-global을 얻기 위해 같은 방식으로 값을 요약 할 수 있습니다 PSS.
  • USS에보 고되지는 smaps않지만 실제로는 개인 매핑의 합계이므로 동일한 방식으로 얻을 수도 있습니다

* "공유 가능"페이지는 실제로 공유 될 때까지 개인 매핑으로 계산됩니다 . 즉 libfoo, 현재을 사용하는 프로세스가 하나 뿐인 경우 해당 라이브러리의 텍스트 섹션이 프로세스의 개인 매핑에 나타납니다 . 다른 프로세스가 해당 라이브러리를 사용하기 시작할 때만 공유 매핑에 포함되며 개인 매핑에서 제거됩니다.
+ 모든 프로세스에 대해 값이 정확하게 합산되는 것은 아닙니다. 이유가 확실하지 않습니다 ... 죄송합니다.


큰 답변 주셔서 감사합니다. 감사합니다. 나는 LWM 기사를 읽고 몇 가지 더 질문을하도록 영감을 주었으므로 위의 질문에 추가했습니다.
Ankur Agarwal

큰! 매우 도움이됩니다 !!
camino

나는 여전히 shared_dirty에 대해 혼란 스럽습니다. 이것의 더러운 특성이 여전히 공유되지 못하게합니까?
Kevin

@ 케빈 (Kevin) : 만약 그들이 공유되지 않았다면, 그들은 설명되지 않을 것입니다 Shared_Dirty-당신의 질문을 명확히 할 수 있습니까?
Mat

더티는 오리지널에서 수정 된 것을 의미합니다. 프로세스? 그것이 공유되는 것에서 현지인이되는 방법이 아닌가?
케빈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.