특정 Mac 응용 프로그램에서 얼마나 많은 스왑을 사용합니까?


15

Mac OSX (10.2 이상)에서 실행중인 특정 응용 프로그램이 일부 메모리가 스왑 아웃되었는지 (즉, /private/var/vm/swapfile*파일 중 하나) 있는지 알 수있는 방법이 있습니까? 그리고 얼마나?

바운티 (150rps)

간단한 질문입니다. 현상금 기간이 2 일 미만인 것으로 확인되면 첫 번째 정답이 수락됩니다. 그래도 아직 얻지 못했다면 가장 흥미로운 새로운 사실을 알려주는 사람에게 수여합니다. 그리고 답에서 하나만 배우지 않으면 가장 예쁘게 쓴 사람에게 현상금을 수여합니다.


이것은 나쁜 질문입니다. 찾고자하는 숫자는 측정하려고했기 때문에 변경 될 것입니다 (Heisenberg 불확실성 원리를 생각하십시오). 또한 다른 응용 프로그램 및 메모리 요구 사항, io 패턴 및 프로세스 우선 순위에 따라 항상 변경됩니다. 숫자를 찾으면 OS 코드를 편집하지 않으면 응용 프로그램의 관점에서 변경하기 위해 할 일이 거의 없기 때문에 OS 코드를 편집하지 않는 것이 좋습니다.
gavaletz

3
@gavaletz : 오늘 아침 침대의 잘못된 쪽에서 벗어나? Linux가 / proc / $ pid / smaps를 사용하여 가능한 스왑 프로파일 링을 원합니다. 나는 일반적으로 귀를 사용하여 갑작스런 스왑 활동을 식별 할 수 있으므로 gavaletz의 불확실성 원칙에 너무 신경을 쓰지 않습니다.
Charles Stewart

답변:


13

나는 인터넷 검색을 많이했다 ;-) 내가 이해하는 것처럼, 주어진 프로세스의 가상 메모리 는 OS에 의해 처리되고 RAM 인 것처럼 응용 프로그램에 제공되는 페이지 로 나뉩니다 .

OS X에서는 Mach 커널을 기반으로하는이라는 데몬이이를 처리합니다 dynamic_pager. 이 프로세스는 /private/var/vm언급 한대로 스왑 파일을 생성합니다 . 이러한 스왑 파일은 응용 프로그램별로 생성되는 것이 아니라 "필요한 메모리"로 생성됩니다. 스왑 파일은 4096 바이트의 페이지로 분할 된 다음 가상 메모리가 필요한 프로세스 (OS에서 간주하는 프로세스)에 페이지 가 할당됩니다. 따라서 스왑 파일을 지정된 응용 프로그램과 연결할 수는 없지만 주어진 프로세스에서 사용중인 페이지 수를 볼 수 있습니다.

vm_stat터미널 에서 명령을 시도 할 수 있습니다 . 이를 통해 VM 사용 통계를 얻을 수 있습니다 ( '페이지 크기'에 활성화 된 페이지 수와 스왑 파일의 크기가 곱 해짐에 유의하십시오). 또한 VM을 사용하여 여러 프로세스를 가질 수 있지만 두 개의 스왑 파일 만있는 이유도 설명합니다.

다른 재미있는 명령은 vmmap [process id]pagestuff입니다.


그건 그렇고, 좀 더 알고 싶다면 developer.apple.com/mac/library/documentation/Darwin/Conceptual/…을 확인하십시오 .
trolle3000

이것은 유망 해 보인다. 이것은 질문의 첫 번째 부분에 대한 명확한 대답을 제공하는 것으로 보이며 두 번째 부분에 대한 구체적인 대답을 암시합니다. 더 파고 들어야합니다 ...
Charles Stewart

인가되지 vmmap [pid]또는 vmmap -pages [pid]질문의 두 번째 부분에 대한 대답은?
trolle3000

vmmap $ pid는 쓰기 가능한 영역으로 분류하는 것에 대한 명확한 정보를 제공합니다. 읽기 전용 영역에 대해 할당 된 (즉, 스왑 가능) 메모리와 스왑 된 메모리를 구분하지 않지만 구별이 그렇게 중요하지 않을 수 있습니다. 내일이 대답을 받아 들일 것입니다.
Charles Stewart

5

vmmap PID명령은 주어진 프로세스에 대한 유용한 통계를 숫자로 제공해야합니다.


vmmap [AppName]도 작동
Studer

4

여기에 게시 된 아이디어를 기반 으로이 작은 코드 줄을 만들었습니다.

sudo vmmap notifyd | grep -A3 'Summary'

vmmap 출력의 요약 섹션 (3 줄)이 표시됩니다. 내가 사용했던 notifyd이 예에서,하지만 당신은 어떤 PID 당신이 알고있는 것을 대체 할 수 있습니다.

이 줄은 실행중인 모든 프로세스의 모든 요약 줄을 나열하려고 시도합니다. 프로세스 ID가 이미 없어서 (프로세스가 종료 되었기 때문에) 일부는 실패 할 것입니다.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

편집 : 일부 익명 사용자는 원래 명령이 더 이상 작동하지 않기 때문에이 마지막 명령 줄에서 개선이 필요하다는 것을 알았습니다. 누구든지 대단히 감사합니다. 편집이 거부되어 죄송합니다. (첫 번째 명령은 이전에 'ps xa'를 읽었으며 ps의 제목이 vmmap으로 인해 vmmap이 실패했습니다.)

추가 개선 : 프로그램 이름을 알고 싶다면이 작은 변경 사항을 사용하십시오.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

이 명령의 다른 쪽 끝에 약간의 수정이있어 특정 프로그램 이름 또는 명령 행 경로 구성 요소를 필터링 할 수 있습니다. 여기서는 'Library / PrivateFrameworks'의 모든 프로세스를 예를 들어보고 있습니다.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |

vmmap을 32-but 프로세스로 시작할 수 없어 xargs를 중지시키는 데 실패했습니다. 카드를 계속 받으려면 했어요 ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. 여전히 ctrl + c에서 멈추지 않지만 vmmap 오류에서도 멈추지 않습니다.
ShadSterling

0

/ Applications / Utilities 폴더에서 활동 모니터를 열면이를 알려주는 가상 메모리 열이 있습니다. 가상 메모리 헤더를 클릭하면 응용 프로그램에서 가장 많이 사용하거나 가장 적게 사용하는 항목별로 정렬 할 수 있습니다. 또한 내 프로세스를 모든 프로세스로 변경하고 한 응용 프로그램에 여러 프로세스가있을 수 있다는 점에 유의하십시오. 예를 들어 타사 응용 프로그램 인 Little Snitch는 "Little Snitch Network Monitor"및 "Little Snitch UIAgent"로 구성됩니다.


4
그건 틀렸어요. 가상 메모리 열의 숫자는 현재 RAM과 스왑, mmaped 파일에있는 메모리의 합계이며 다른 것을 모릅니다.
Tadeusz A. Kadłubowski

확실합니까? 애플은 support.apple.com/kb/TA20517에
ridogi

1
VM 번호는 할당되었지만 실제로 사용되지 않은 양을 측정합니다. 스왑 파일에는 실제로 사용되는 것이 있습니다.
Chealion

@Chealion : 할당되었지만 실제로 사용되지 않은 메모리는 어떻게 정의합니까?
Tadeusz A. Kadłubowski

@ tkadlubo :이 경우 프로세스에 사용할 수있는 VM 크기와 디스크에 페이지 아웃 된 실제 페이지 간의 불일치가 있다고 생각합니다. 디스크의 VM 번호와 스왑 파일이 다르다는 점 외에는 그것을 정의하는 방법을 잘 모르겠습니다.
Chealion

0

ridogi가 말했듯이 활동 모니터를여십시오. 검사하려는 프로세스로 이동하고 ... 검사!를 클릭하십시오. 그런 다음 메모리를 클릭하십시오. 이것은 주어진 프로세스가 얼마나 많은 스왑을 사용하는지 알려줍니다.

즐기세요!


3
검사 페이지에는 #pagefaults, #pageins 및 mmapped 파일 목록과 같이 질문에 대한 답변과 긍정적으로 상관 된 모든 종류의 흥미로운 것들이 나와 있지만 질문에 대한 실제 답변은 어디에도 없습니다.
찰스 스튜어트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.