스레드
다른 이름: 스레드 수
간단한 답
스레드는 프로세스 안에서 따로 실행되는 작업 흐름이며, 프로세스는 여러 스레드를 서로 다른 CPU 코어에서 동시에 실행할 수 있습니다. 활성 상태 보기의 스레드 열은 각 프로세스가 지금 가진 스레드 수를 보여 줍니다.
대부분의 앱은 스레드를 많이 씁니다. 하나는 인터페이스를 그리고 클릭을 처리하며, 나머지는 네트워크 요청, 파일 접근, 백그라운드 작업을 맡습니다. 큰 앱이라면 스레드가 수십 개인 것은 정상입니다.
스레드 수로는 앱이 얼마나 바쁜지 거의 알 수 없습니다. 대부분의 스레드는 기다리며 시간을 보냅니다. 실제 작업량은 % CPU로 보는 편이 낫습니다.
스레드 수를 보는 곳
활성 상태 보기에서 CPU 탭을 클릭합니다. 스레드 열에 프로세스별 스레드 수가 나오고, 윈도우 하단에 Mac 전체의 스레드 수와 프로세스 수가 나옵니다.
터미널에서 ps -M -p <PID> 명령을 실행하면 프로세스 하나의 스레드가 나열됩니다.
스레드 수가 늘어날 때 주의할 점
스레드 수가 몇 시간 동안 멈추지 않고 계속 늘어난다면, 앱이 스레드를 시작하고 끝내지 않는 버그일 수 있습니다. 그 앱의 메모리도 늘어나거나 느려진다면 앱을 다시 시작하는 것이 무난한 첫 단계이며, 개발자에게 알리면 도움이 됩니다.
일부 앱의 스레드가 수백 개인 이유
macOS는 Grand Central Dispatch를 통해 앱에 공용 작업 스레드 풀을 제공합니다. 앱이 이미지 디코딩이나 파일 읽기 같은 작은 작업을 많이 넘기면, 풀이 늘어나 이를 처리했다가 나중에 다시 줄어듭니다. 이것만으로도 바쁜 앱에 스레드가 수십 개 늘 수 있습니다.
브라우저, 채팅 앱, 코드 편집기는 여러 프로세스를 실행하는 경우가 많고, 각 프로세스에 그리기, 네트워킹, 오디오, 스크립트용 스레드가 따로 있습니다. 오디오와 비디오 앱은 재생이 기다리지 않도록 스레드를 미리 준비해 둡니다. 이를 모두 더하면 큰 앱 하나에 스레드 수백 개도 드문 일이 아닙니다.
kernel_task는 모든 프로세스 중 스레드 수가 가장 많은 경우가 많습니다. macOS 커널과 드라이버가 쓰는 스레드를 담고 있으며, 문제의 신호가 아닙니다.
앱 하나의 스레드 수 확인하는 방법
- 활성 상태 보기에서 프로세스를 선택하고 이중 클릭하거나, 도구 막대의 정보 버튼을 클릭합니다.
- 인스펙터 윈도우에 그 프로세스의 스레드, 포트, 문맥 전환이 나옵니다.
- 터미널에서
top -l 1 -pid <PID> -stats pid,command,th명령을 실행합니다. <PID>는 PID 열의 프로세스 ID로 바꾸세요. #TH 값은 전체 스레드 수와, 슬래시 뒤에 실행 중인 스레드 수를 보여 줍니다. - 모든 프로세스를 스레드 수로 정렬하려면
top -o th -stats pid,command,th명령을 실행하고, 끝내려면 q를 누릅니다.
정상인 스레드 수와 걱정해야 할 스레드 수
전체 개수보다 시간에 따라 어느 방향으로 움직이는지가 더 중요합니다.
- 정상: 윈도우를 열거나, 다운로드를 시작하거나, 내보내기를 시작하면 개수가 뛰었다가 작업이 끝나면 다시 내려갑니다.
- 정상: 개수가 높지만 몇 시간 동안 거의 그대로 유지됩니다.
- 걱정: 앱이 쉬고 있을 때도 하루 종일 올라가기만 하고 내려오지 않습니다.
- 걱정: 스레드 수가 늘면서 메모리나 포트 수도 함께 늘어납니다. 이런 조합은 대개 앱의 누수를 가리킵니다.
- 걱정: 쓰고 있지 않은 앱에서
top의 슬래시 뒤에 나오는 실행 중인 스레드가 많습니다. 시키지 않은 일을 하고 있는 것입니다.
스레드와 CPU 코어
스레드가 코어보다 많은 것은 정상입니다. macOS는 1초에도 여러 번 코어를 스레드 사이에서 전환하며, 대부분의 스레드는 어차피 기다리고 있습니다. 코어를 두고 경쟁하는 것은 실행 중인 스레드뿐입니다.
같은 순간에 실행될 수 있는 스레드 수는 sysctl -n hw.logicalcpu 명령으로 얻은 논리 코어 수와 같습니다. 준비된 스레드가 그보다 많으면 남는 스레드는 기다리며, 이 기다림이 로드 평균을 올립니다.
자주 묻는 질문
활성 상태 보기의 스레드는 무슨 뜻인가요?
프로세스가 실행하고 있는 스레드의 수입니다. 스레드 덕분에 앱 하나가 파일을 다운로드하면서 윈도우를 그리는 것처럼 여러 일을 동시에 할 수 있습니다.
스레드 수가 많으면 나쁜가요?
대개는 아닙니다. 큰 앱은 스레드가 수십, 수백 개인 경우가 많고 대부분은 쉬고 있습니다. 멈추지 않고 계속 늘어나는 경우를 주의해서 보세요.
스레드는 % CPU가 100%를 넘는 것과 어떤 관계가 있나요?
프로세스는 스레드 여러 개가 동시에 일하고 있을 때만 코어를 두 개 이상 쓸 수 있습니다. 그래서 % CPU가 100%를 넘게 됩니다.
Mac은 스레드를 한 번에 몇 개까지 실행할 수 있나요?
같은 순간에는 논리 코어 하나당 하나입니다. sysctl -n hw.logicalcpu 명령을 실행하면 그 수를 볼 수 있습니다. 스레드는 수천 개가 더 있을 수 있지만, 차례로 돌아가며 실행됩니다.
앱을 종료하면 스레드도 사라지나요?
네. 프로세스가 끝나면 그 스레드도 모두 함께 끝납니다. 너무 많이 늘어난 스레드 수를 초기화하는 가장 빠른 방법은 앱을 다시 시작하는 것입니다.
kernel_task의 스레드가 이렇게 많은 이유는?
kernel_task는 macOS 커널이며, 그 스레드에는 커널과 드라이버가 쓰는 스레드가 포함됩니다. 개수가 많은 것은 정상입니다.
관련 항목
활성 상태 보기보다 나은 것을 찾고 있나요? Mac용 활성 상태 보기 대체 앱 추천을 확인하거나 용어집의 모든 용어를 둘러보세요.