용어집/자주 보이는 프로세스

logd

다른 이름: 통합 로깅

간단한 답

logd는 macOS와 앱이 실행 중에 보고하는 내용을 시스템 전체에 걸쳐 기록하는 통합 로그를 운영하는 macOS 프로세스입니다. 모든 프로세스가 로그 메시지를 logd에 넘기면, logd는 이를 압축해 최근 것은 메모리에 두고 나머지는 디스크의 로그 저장소에 저장하며, 콘솔 앱과 터미널의 log 명령이 이를 읽습니다.

logd는 하나이며 root로 실행되고, Mac이 시동될 때 launchd가 시작합니다. macOS Sierra부터 대부분의 메시지는 더 이상 /var/log의 텍스트 파일로 가지 않습니다. 앱이 메시지를 logd에 넘기면 logd는 압축된 바이너리 형식으로 /var/db/diagnostics에 저장하고, 각 메시지의 고정된 텍스트는 /var/db/uuidtext에 보관합니다. 그래서 파일을 여는 대신 콘솔이나 log 명령으로 로그를 읽습니다.

CPU와 디스크 사용량은 Mac의 나머지가 로그를 얼마나 남기느냐를 따라갑니다. 조용한 Mac에서는 1퍼센트도 안 되게 씁니다. logd가 목록 위쪽에 있다면 logd 자체의 잘못인 경우는 거의 없습니다. 다른 프로세스가 평소보다 훨씬 빠르게 메시지를 쓰고 있고, logd는 그것을 저장하는 일을 하고 있을 뿐입니다.

logd가 CPU나 디스크를 많이 쓰는 이유

앱이나 백그라운드 프로세스가 루프를 돌며 로그를 남기고 있는 것입니다. 서버에 연결하지 못하는 네트워크 클라이언트, 멈춘 동기화, 같은 오류를 계속 보고하는 드라이버처럼 1초에 여러 번 실패와 재시도를 반복하는 프로세스는 1분에 수십만 개의 메시지를 쓸 수 있습니다. logd는 그 하나하나를 압축해 저장하므로, CPU와 쓴 바이트가 함께 올라갑니다.

문제 해결을 위해 켠 추가 로깅도 같은 효과를 냅니다. 버그 리포트용으로 설치한 로깅 프로파일이나 log config 명령으로 바꾼 설정은 logd가 평소에는 메모리에만 두는 메시지까지 저장하게 합니다.

해결 방법

logd가 아니라 로그를 쏟아 내는 프로세스를 찾아 그 프로세스를 해결하세요. 터미널에서 log stats --last 5m 명령을 실행하면 지난 5분 동안 로그를 많이 남긴 순서로 프로세스가 나열됩니다. 맨 위에 있는 앱을 종료하거나 업데이트하고, 멈춘 백그라운드 프로세스라면 Mac을 재시동하세요.

더 이상 필요 없는 로깅 프로파일을 설치했다면 시스템 설정 → 일반 → 기기 관리에서 제거하세요. logd를 종료해도 도움이 되지 않습니다. macOS가 바로 다시 시작하고, 로그를 쏟아 내는 프로세스는 계속 그렇게 합니다.

로그를 쏟아 내는 프로세스를 찾는 방법

logd는 저장만 하는 쪽이므로, 알아야 할 것은 누가 쓰고 있느냐입니다. 활성 상태 보기는 비용을 보여 주고, 터미널은 범인을 보여 줍니다.

  1. 활성 상태 보기를 열고 CPU 탭을 클릭한 다음, 보기 → 모든 프로세스를 선택하고 검색 필드에 logd를 입력합니다. % CPU를 확인해 둡니다.
  2. 디스크 탭을 클릭하고 logd의 쓴 바이트를 지켜봅니다. 수치가 빠르게 올라가면 쏟아지는 메시지를 디스크에 저장하고 있다는 뜻입니다.
  3. 검색 필드를 지우고 CPU 탭을 % CPU로 정렬합니다. 로그를 쏟아 내는 프로세스는 그 자체도 바쁜 경우가 많고, 매번 새 PID로 계속 다시 시작되고 있을 수도 있습니다.
  4. 터미널을 열고 log stats --last 5m 명령을 실행합니다. processes 아래에 지난 5분 동안 로그를 가장 많이 남긴 프로세스가 이벤트 수, 바이트와 함께 나열됩니다. WindowServer와 몇몇 시스템 프로세스는 어느 Mac에서나 로그를 많이 남기므로, 비중이 유난히 크거나 유휴 상태여야 할 프로세스를 찾으세요.
  5. 그 프로세스가 무엇을 남기는지 읽으려면 Name 자리에 프로세스 이름을 넣어 log show --last 5m --predicate 'process == "Name"' 명령을 실행합니다. 실시간으로 보려면 같은 조건으로 log stream 명령을 사용하고, 멈추려면 Control-C를 누르세요.

정상적인 logd 사용량과 문제 상황

정상: logd는 CPU를 몇 퍼센트보다 훨씬 적게 쓰며, Mac이 시동되거나, 잠자기에서 깨어나거나, 많은 앱이 한꺼번에 열릴 때 잠깐 오릅니다.

살펴볼 만한 경우: logd가 몇 분씩 CPU 목록 위쪽에 머물거나, 별로 하는 일이 없는데도 쓴 바이트가 빠르게 계속 늘어납니다. 흔한 원인은 다음과 같습니다.

  • 서버에 연결하지 못하는 네트워크 클라이언트나 멈춘 동기화처럼, 실패와 재시도를 촘촘히 반복하는 프로세스.
  • 충돌한 뒤 곧바로 다시 시작되면서 매번 같은 시작 메시지와 실패 메시지를 남기는 도우미.
  • log config 명령으로, 또는 버그 리포트용으로 설치한 로깅 프로파일로 켜진 debug나 info 로깅.
  • 자체 설정에서 상세 로깅을 켠 앱, 또는 모든 것을 로그로 남기는 앱의 테스트 빌드.
  • 스트리밍 중인 채로 둔 콘솔, 또는 실시간 로그를 늘 읽는 도구. 이 비용은 주로 logd의 짝인 diagnosticd에 나타납니다.

콘솔에서 로그 읽기

응용 프로그램 → 유틸리티에 있는 콘솔은 같은 로그를 윈도우로 보여 줍니다. 도구 막대의 시작을 클릭하면 메시지가 들어오는 대로 보이고, 검색 필드에 프로세스 이름을 입력하면 그 이름이 들어간 메시지만 보입니다. 한 프로세스가 읽는 속도보다 빨리 화면을 채운다면 logd를 바쁘게 하는 것을 찾은 것입니다.

다 봤으면 스트리밍을 멈추세요. 콘솔이 실시간 로그를 보여 주는 동안에는 diagnosticd와 로그를 남기는 프로세스들이 일을 더 하게 되는데, 이미 바쁜 Mac에서 바라는 것과는 정반대입니다.

자주 묻는 질문

Mac의 logd, 무엇인가요?

통합 로그를 뒷받침하는 macOS 프로세스입니다. 모든 앱과 시스템 프로세스가 로그 메시지를 logd에 보내면, logd가 이를 압축해 저장하므로 콘솔과 log 명령이 보여 줄 수 있습니다.

logd의 CPU 사용량이 높은 이유는 무엇인가요?

거의 항상 다른 프로세스가 루프를 돌며 로그 메시지를 쓰고 있어서 logd가 그것을 모두 저장해야 하기 때문입니다. 터미널에서 log stats --last 5m 명령을 실행하면 어떤 프로세스가 로그를 가장 많이 남기는지 볼 수 있습니다.

logd가 보관하는 로그를 지울 수 있나요?

지울 수는 있지만 그럴 이유는 거의 없습니다. 로그 저장소가 크기 한도에 이르면 macOS가 오래된 메시지를 스스로 정리하므로 끝없이 커지지 않습니다. 비워야 한다면 sudo log erase --all 명령으로 저장된 메시지를 지울 수 있지만, 사용자나 Apple 지원이 문제를 진단하는 데 필요한 기록도 함께 사라집니다. /var/db/diagnostics 폴더나 /var/db/uuidtext 폴더를 직접 지우지 마세요.

Mac의 diagnosticd는 무엇인가요?

통합 로깅 시스템의 또 다른 부분입니다. logd는 메시지를 저장하고, diagnosticd는 메시지를 콘솔과 log stream에 실시간으로 전달합니다. 둘 중 하나가 실시간 로그를 보여 주는 동안에만 CPU를 더 씁니다.

logd를 종료해도 괜찮나요?

macOS가 바로 다시 시작하므로 오래가는 해는 없지만, 도움도 되지 않습니다. 로그를 쏟아 내던 프로세스는 계속 그렇게 하고, logd는 다시 시작되자마자 그 일을 다시 맡습니다.

관련 항목

활성 상태 보기보다 나은 것을 찾고 있나요? Mac용 활성 상태 보기 대체 앱 추천을 확인하거나 용어집의 모든 용어를 둘러보세요.