Глосарій/Процеси, які ви побачите

logd

Також: уніфікований журнал

Коротка відповідь

logd — процес macOS, що веде уніфікований журнал, тобто загальносистемний запис того, що macOS і ваші програми повідомляють під час роботи. Кожен процес передає свої повідомлення журналу logd, а той стискає їх, тримає нещодавні в памʼяті, а решту зберігає в сховищі журналу на диску, звідки їх читають програма «Консоль» і команда log у Терміналі.

Є лише один logd, він працює від імені root, і launchd запускає його під час запуску Mac. Починаючи з macOS Sierra, більшість повідомлень більше не потрапляє в текстові файли в /var/log. Програми передають їх logd, який зберігає їх у стиснутому двійковому форматі в /var/db/diagnostics, а незмінний текст кожного повідомлення — у /var/db/uuidtext. Тому журнал читають у «Консолі» або командою log, а не відкриваючи файл.

Його навантаження на процесор і диск залежить від того, скільки пише в журнал решта Mac. На спокійному Mac він використовує частку відсотка. Коли logd вгорі списку, майже ніколи не винен сам logd: інший процес пише повідомлення набагато швидше, ніж зазвичай, а logd виконує роботу з їх зберігання.

Чому logd так навантажує процесор або диск

Програма або фоновий процес пише в журнал у циклі. Процес, що дає збій і повторює спробу багато разів на секунду, як-от мережевий клієнт, який не може достукатися до свого сервера, синхронізація, що застрягла, або драйвер, що раз у раз повідомляє ту саму помилку, може записувати сотні тисяч повідомлень за хвилину. logd стискає й зберігає кожне, і разом із ними зростають його навантаження на процесор і «Записано байтів».

Такий самий ефект має додаткове журналювання, ввімкнене для діагностики. Профіль журналювання, встановлений для звіту про помилку, або зміна, зроблена командою log config, змушує logd зберігати повідомлення, які він зазвичай тримав би лише в памʼяті.

Що з цим робити

Знайдіть процес, що засмічує журнал, і розбирайтеся з ним, а не з logd. У Терміналі log stats --last 5m впорядковує процеси за тим, скільки вони записали в журнал за останні пʼять хвилин. Завершіть або оновіть програму вгорі списку чи перезавантажте Mac, якщо застряг фоновий процес.

Якщо ви встановили профіль журналювання, який більше не потрібен, вилучіть його в Системних параметрах → Загальні → Керування пристроями. Завершення logd не допомагає: macOS одразу запускає його знову, а процес, що засмічує журнал, продовжує своє.

Як знайти процес, що засипає журнал повідомленнями

logd лише зберігає записи, тож корисне питання — хто їх пише. Монітор активності показує ціну, а Термінал — винуватця.

  1. Відкрийте Монітор активності, натисніть вкладку «Центральний процесор», виберіть Перегляд → Усі процеси і введіть logd у поле пошуку. Запамʼятайте його «% процесора».
  2. Натисніть вкладку «Диск» і стежте за «Записано байтів» для logd. Число, що швидко зростає, означає, що він зберігає на диск потік повідомлень.
  3. Очистіть поле пошуку й відсортуйте вкладку «Центральний процесор» за «% процесора». Процес, що засипає журнал, часто й сам зайнятий і може перезапускатися знову й знову, щоразу з новим PID.
  4. Відкрийте Термінал і виконайте log stats --last 5m. У розділі processes наведено процеси, які записали в журнал найбільше за останні пʼять хвилин, з кількістю подій і байтів. WindowServer та кілька інших системних процесів багато пишуть у журнал на кожному Mac, тож шукайте процес із незвичною часткою або той, що мав би бути неактивним.
  5. Щоб прочитати, що каже цей процес, виконайте log show --last 5m --predicate 'process == "Name"', підставивши назву процесу замість Name. Щоб стежити наживо, використайте log stream з тим самим предикатом і натисніть Control-C, щоб зупинити.

Нормальна робота logd і ознаки проблеми

Нормально: logd тримається значно нижче кількох відсотків процесора, з короткими підйомами, коли Mac запускається, виходить зі сну або коли водночас відкривається багато програм.

Варто перевірити: logd хвилинами тримається вгорі списку процесора або його «Записано байтів» швидко зростає, хоча ви майже нічого не робите. Звичні причини:

  • Процес, що в тісному циклі зазнає збою й пробує знову, як-от мережевий клієнт, що не може дістатися свого сервера, або синхронізація, що застрягла.
  • Помічник, що аварійно завершується й одразу запускається знову, щоразу записуючи в журнал той самий запуск і збій.
  • Журналювання рівнів debug чи info, увімкнене командою log config або профілем журналювання, установленим для звіту про помилку.
  • Програма з увімкненим докладним журналюванням у її власних параметрах або тестова збірка програми, що записує все.
  • Консоль, залишена в режимі трансляції, або інструмент, що постійно читає живий журнал. Ця ціна здебільшого видна в diagnosticd, напарнику logd.

Читання журналу в Консолі

Консоль, що в Програми → Утиліти, показує той самий журнал у вікні. Натисніть «Запустити» на панелі інструментів, щоб бачити повідомлення в міру надходження, і введіть назву процесу в поле пошуку, щоб показати лише повідомлення, де він згадується. Коли один процес заповнює екран швидше, ніж ви встигаєте читати, ви знайшли, чим зайнятий logd.

Зупиніть трансляцію, коли закінчите. Поки Консоль показує живий журнал, diagnosticd і процеси, що пишуть у журнал, виконують додаткову роботу, а це протилежне тому, що потрібно на вже зайнятому Mac.

Що питають люди

Що таке logd на Mac?

Процес macOS, що стоїть за уніфікованим журналом. Кожна програма й системний процес надсилають свої повідомлення журналу logd, а той стискає й зберігає їх, щоб їх могли показати «Консоль» і команда log.

Чому logd сильно навантажує процесор?

Майже завжди тому, що інший процес пише повідомлення журналу в циклі, а logd мусить їх усі зберігати. Виконайте log stats --last 5m у Терміналі, щоб побачити, який процес пише в журнал найбільше.

Чи можна видалити журнали, які зберігає logd?

Можна, але для цього рідко є причина. macOS сама видаляє старі повідомлення, коли сховище журналу досягає граничного розміру, тож воно не росте безмежно. Якщо його потрібно очистити, sudo log erase --all видаляє збережені повідомлення разом з історією, яка знадобилася б вам чи службі підтримки Apple для діагностики проблеми. Не видаляйте /var/db/diagnostics чи /var/db/uuidtext вручну.

Що таке diagnosticd на Mac?

Ще одна частина системи єдиного журналювання. logd зберігає повідомлення, а diagnosticd передає їх наживо в Консоль і в log stream. Більше процесора він використовує лише тоді, коли щось із цього показує живий журнал.

Чи безпечно завершити logd?

Тривалої шкоди це не завдасть, бо macOS одразу запускає його знову, але й користі не буде. Процес, що засипав журнал, продовжує, а logd береться за роботу знову, щойно перезапуститься.

Повʼязане

Шукаєте щось краще за Монітор активності? Дивіться найкращі альтернативи Монітору активності для Mac або перегляньте усі терміни глосарію.