프로세스 샘플
다른 이름: 앱 샘플링, 프로세스 샘플링, Sample Process
간단한 답
프로세스 샘플은 선택한 프로세스가 몇 초 동안 무엇을 하는지 기록해, 스레드가 어디에서 시간을 보내는지 텍스트 보고서로 만들어 주는 활성 상태 보기 도구입니다. 개발자는 이 보고서로 앱이 느리거나, 바쁘거나, 멈춘 이유를 찾습니다.
Apple은 프로세스 샘플이 선택한 프로세스에 대해 3초 동안의 보고서를 만든다고 설명합니다. 보고서에는 각 스레드와 그 스레드가 실행하던 함수가 나오고, 각 함수가 몇 번 나타났는지도 표시됩니다.
보고서를 직접 읽을 필요는 없습니다. 앱이 멈췄거나 CPU를 많이 쓰고 있어서 개발자에게 구체적인 자료를 보내고 싶을 때 가장 유용합니다.
이 페이지의 내용
활성 상태 보기에서 프로세스를 샘플링하는 방법
프로세스를 선택한 다음 윈도우 상단의 더 보기 버튼(점 3개)을 클릭하고 프로세스 샘플을 선택합니다. 프로세스를 이중 클릭한 다음 열리는 윈도우에서 샘플을 클릭해도 됩니다.
보고서가 나타나면 텍스트 파일로 저장해 버그 보고서나 지원 요청에 첨부할 수 있습니다.
터미널에서 프로세스를 샘플링하는 방법
sample <PID> 5 명령을 실행하면 프로세스를 5초 동안 샘플링합니다. PID 대신 프로세스 이름의 일부를 써도 됩니다. 보고서는 화면에 출력되고 파일로도 저장되며, 끝나면 경로가 표시됩니다.
샘플 보고서 읽는 방법
보고서는 머리글로 시작합니다. 프로세스 이름과 PID, 경로, 상위 프로세스, 코드 유형, macOS 버전이 나옵니다. 중요한 부분은 그다음 Call graph 아래에 있습니다.
콜 그래프에는 각 스레드가 나열됩니다. 클릭과 키 입력을 처리하는 메인 스레드에는 com.apple.main-thread라는 이름이 붙습니다. 각 스레드 아래에서 함수는 들여쓰기로 어떤 함수가 어떤 함수를 호출했는지 보여 줍니다. 줄 맨 앞의 숫자는 샘플을 채취할 때 그 함수가 스택에 있었던 횟수입니다.
- 숫자가 가장 큰 줄을 따라 가장 깊이 들여쓴 곳까지 내려가세요. 그곳이 스레드가 대부분의 시간을 보낸 곳입니다.
- 메인 스레드의 가장 깊은 줄이
mach_msg,__psynch_cvwait,__semwait_signal같은 대기 호출이라면, 그 스레드는 다른 무언가를 기다리며 막혀 있었던 것입니다. - 가장 깊은 줄이 숫자가 큰 앱 자체의 함수라면, 그 스레드는 작업하느라 바빴던 것입니다.
- 끝부분의 "Sort by top of stack" 섹션에는 가장 자주 실행되던 함수가 나열되며, 같은 데이터를 빠르게 요약한 것입니다.
- 맨 끝의 Binary Images 목록에는 프로세스에 로드된 프레임워크와 라이브러리의 이름이 나옵니다.
터미널에서 샘플을 파일로 저장하는 방법
sample 명령은 활성 상태 보기보다 세밀하게 조절할 수 있습니다. 기본 길이는 10초이며 바꿀 수 있습니다.
- 응용 프로그램 > 유틸리티에서 터미널을 엽니다.
pgrep -lx Safari명령으로 프로세스 ID를 찾습니다. Safari는 프로세스 이름으로 바꾸세요.- 문제가 일어나는 동안
sample <PID> 10 -file ~/Desktop/sample.txt명령을 실행합니다. - 데스크탑에 생긴 파일을 열거나 버그 보고서에 첨부합니다.
샘플이 도움이 될 때와 안 될 때
샘플은 프로세스 하나의 스냅샷입니다. 어떤 앱이 문제인지 이미 알고 있을 때 사용하세요.
- 도움이 됨: 앱이 멈췄을 때, 한 프로세스가 계속 % CPU를 높게 유지할 때, 또는 반복할 수 있는 특정 작업에서 앱이 느릴 때.
- 별로 도움이 안 됨: Mac 전체가 느린데 이유를 모를 때. 이럴 때는 모든 프로세스를 다루는 spindump가 더 맞습니다.
- 도움이 안 됨: 문제가 이미 지나갔을 때. 샘플은 실행되는 동안 일어난 일만 보여 줍니다.
개발자에게 샘플을 보내는 방법
샘플만으로도 쓸모 있지만, 짧은 메모를 덧붙이면 훨씬 대응하기 쉬워집니다.
- 앱이 회복된 뒤가 아니라 멈춰 있거나 바쁠 때 샘플을 만드세요.
- 일부를 복사하지 말고 보고서를 텍스트 파일로 저장하세요. 개발자에게는 콜 그래프 전체와 Binary Images 목록이 필요합니다.
- 연 파일이나 클릭한 버튼처럼 문제가 시작될 때 무엇을 하고 있었는지 적어 두세요.
- 앱 버전과 macOS 버전을 함께 적으세요. 둘 다 보고서 머리글의 Version과 OS Version 옆에도 나옵니다.
- 앱의 지원 페이지나 버그 트래커로 보내고, Apple 앱이라면 피드백 지원을 통해 Apple에 보내세요.
자주 묻는 질문
활성 상태 보기의 프로세스 샘플은 무엇을 하나요?
프로세스가 약 3초 동안 무엇을 하는지 기록하고, 스레드와 스레드가 실행하던 코드를 보고서로 보여 줍니다. 개발자는 이것으로 멈춤과 높은 CPU 사용량을 진단합니다.
프로세스를 샘플링해도 안전한가요?
네. 샘플링은 프로세스를 관찰하기만 합니다. 프로세스를 바꾸거나 멈추지 않습니다.
프로세스는 언제 샘플링해야 하나요?
앱이 멈췄거나 CPU를 많이 쓰고 있을 때처럼 문제가 일어나는 동안 샘플링하세요. 회복된 뒤에 만든 샘플에는 원인이 나타나지 않습니다.
프로세스 샘플은 얼마나 걸리나요?
활성 상태 보기에서는 약 3초 동안 기록합니다. 터미널의 sample 명령은 기본으로 10초, 또는 지정한 초만큼 기록합니다.
샘플 보고서에 개인 정보가 들어 있나요?
프로세스 이름, 파일 경로, 로드된 라이브러리가 들어 있으며, 경로에 사용자 이름이 포함될 수 있습니다. 공개된 곳에 올리기 전에 읽어 보세요.
샘플에 함수 이름 대신 물음표가 나오는 이유는?
앱의 그 부분에 대한 심볼 이름을 쓸 수 없었기 때문입니다. 개발자는 주소를 자신의 코드와 맞춰 볼 수 있으니 보고서를 그대로 보내세요.
관련 항목
활성 상태 보기보다 나은 것을 찾고 있나요? Mac용 활성 상태 보기 대체 앱 추천을 확인하거나 용어집의 모든 용어를 둘러보세요.