Диагностика Mac в Терминале: почему тормозит, греется и не спит
Как в Терминале macOS найти причину тормозов, перегрева и проблем со сном: процессы и load average, троттлинг, память и подкачка, задержки диска и SMART, кто мешает сну, системный журнал и отчёты о сбоях.
Содержание
- 1Процессор и процессы
- top: кто грузит процессор прямо сейчас
- ps: список процессов с сортировкой
- uptime и load average
- 2Перегрев и троттлинг
- 3Память
- memory_pressure: хватает ли памяти
- vm_stat: из чего состоит память
- Подкачка и объём памяти
- 4Диск
- Свободное место
- iostat: нагрузка на диск
- fs_usage: сколько ждёт каждая операция
- TRIM и SMART
- 5Сон и питание
- pmset -g: текущие настройки и кто мешает сну
- pmset -g assertions: подробности о запретах
- pmset -g log: когда засыпал, просыпался и выключался
- 6Системный журнал
- log show: ошибки за последний час
- log stream: журнал в реальном времени
- 7Отчёты о сбоях
- 8sysdiagnose: полный отчёт для поддержки
- 9Симптом → что запустить
- 10Шпаргалка команд
- 11Частые ошибки
- 12Mac тормозит: 7 шагов
- 13Частые вопросы
- Почему в top у всех процессов 0 % загрузки?
- Какой load average нормальный для Mac?
- Как проверить, что Mac сбрасывает частоту из-за перегрева?
- Почему vm_stat показывает мало свободной памяти, хотя Mac не тормозит?
- Как узнать, кто не даёт Mac уснуть?
- Почему Mac просыпается сам по себе?
- Ошибки в log show — это проблема?
- Где найти отчёты о сбоях программ?
Когда Mac начинает тормозить, первым делом открывают «Мониторинг системы». Он показывает, кто ест процессор и память, но молчит о главном: ограничивает ли система частоту из-за температуры, сколько миллисекунд ждёт каждая операция с диском и кто не даёт компьютеру уснуть. Всё это видно только в Терминале.
В этой статье — набор встроенных команд macOS, которые за пару минут отвечают на вопрос «что не так». Все выводы, подписанные «Вывод на моём iMac», сняты на моём iMac 21,5″ 2019 года: Intel Core i7-8700, 32 ГБ памяти, SSD Crucial BX500 на 240 ГБ, macOS Sequoia 15.7.9. Остальное — примеры, они так и подписаны.
Порядок разделов — от простого к сложному: процессор, температура, память, диск, сон, журнал. Обычно причина находится уже на втором-третьем шаге.
Процессор и процессы
top: кто грузит процессор прямо сейчас
top в macOS — это BSD-версия, и ключи у неё не такие, как в Linux. Чтобы получить снимок и не попасть в интерактивный режим, используют -l (сколько замеров сделать):
top -l 1 -n 8 -o cpu -stats pid,command,cpu,mem-l 1— один замер и выход;-n 8— показать 8 процессов;-o cpu— сортировать по загрузке процессора;-stats pid,command,cpu,mem— оставить только нужные колонки.
Disks: 1582238/32G read, 311341/4436M written.
PID COMMAND %CPU MEM
4091 sed 0.0 620K
4090 tail 0.0 424K
4089 top 0.0 4124K
3346 mdworker_shared 0.0 1732K
3345 UserNotification 0.0 7360KВидите ловушку? У всех процессов 0.0. Процент загрузки — это разница между двумя замерами, а при -l 1 замер один, и сравнивать не с чем. Поэтому берите два замера и смотрите на второй:
top -l 2 -n 10 -o cpu -stats pid,command,cpu,mem | tail -n 11Строка Disks: в шапке — сколько система прочитала и записала с момента загрузки. У меня за 5 часов 47 минут — 32 ГБ чтения и около 4,4 ГБ записи.
Для живого наблюдения запустите top -o cpu -s 2: список обновляется раз в 2 секунды, выход — клавиша Q.
ps: список процессов с сортировкой
ps удобен, когда нужно отфильтровать или сохранить список:
ps aux | sort -nrk 3,3 | head -n 10Третья колонка — %CPU, sort -nrk 3,3 сортирует по ней числом и по убыванию. Чтобы найти главных пожирателей памяти, сортируйте по четвёртой колонке %MEM:
ps aux | sort -nrk 4,4 | head -n 10В отличие от top, ps показывает средний процент за всё время жизни процесса. Для поиска «того, кто грузит прямо сейчас» он хуже, зато хорошо находит постоянных обжор.
Что обычно оказывается наверху:
- 🔎 mds, mds_stores, mdworker — индексация Spotlight. После обновления macOS или копирования большой папки может работать часами. Состояние индекса показывает
mdutil -s /. - 🌡️ kernel_task на Mac с Intel — часто не нагрузка, а защита от перегрева. По словам Apple, система так «занимает» процессор, чтобы другим процессам досталось меньше и он остыл. Смотрите раздел про температуру ниже.
- 📸 photoanalysisd, mediaanalysisd — анализ фото в «Фото». Работает, пока Mac простаивает.
- ☁️ bird, cloudd — синхронизация iCloud Drive.
Завершить зависший процесс можно по его номеру: kill 1234, а если не помогает — kill -9 1234. Для обычных программ проще ⌘ Command + ⌥ Option + Esc — окно «Принудительно завершить». Больше сочетаний — в статье Сочетания клавиш Mac.
uptime и load average
uptime22:04 up 5:47, 2 users, load averages: 2,53 1,99 1,77Три числа — средняя нагрузка за 1, 5 и 15 минут. Грубо говоря, это сколько потоков в среднем хотели работать одновременно. Сравнивать нагрузку нужно с числом логических процессоров:
sysctl -n hw.ncpuУ моего i7-8700 6 ядер с Hyper-Threading, то есть 12 потоков, и hw.ncpu возвращает 12. Значит, 2,53 — это примерно пятая часть возможностей процессора. Ничего тревожного. Первое число больше третьего: за последнюю минуту нагрузка немного выросла, скорее всего из-за самих команд диагностики, которые в тот момент работали.
Как читать load average:
- ✅ меньше числа потоков — процессор справляется;
- ⚠️ около числа потоков — работает на пределе;
- 🔥 заметно больше — процессы стоят в очереди, Mac тормозит.
Перегрев и троттлинг
Если Mac разогнался, а потом стал вялым, проверьте, не снижает ли система частоту процессора:
pmset -g thermNote: No thermal warning level has been recorded
Note: No performance warning level has been recorded
2026-10-12 22:04:30 +0300 CPU Power notify
CPU_Scheduler_Limit = 100
CPU_Available_CPUs = 12
CPU_Speed_Limit = 100Как читать:
No thermal warning level has been recorded— с момента загрузки система ни разу не фиксировала тепловое предупреждение;CPU_Speed_Limit = 100— процессору разрешено 100 % частоты. Если число меньше, например 60, процессор замедлен из-за температуры;CPU_Scheduler_Limit— доля времени, которую планировщик отдаёт процессам;CPU_Available_CPUs = 12— все 12 потоков в работе.
На Mac с Apple Silicon вывод этой команды обычно короче: строк CPU_* может не быть.
Температуру и обороты вентилятора показывает powermetrics. Ему нужны права администратора, а набор датчиков зависит от процессора:
# Mac с Intel: температура кристалла и вентилятор
sudo powermetrics --samplers smc -n 1
# Mac с Apple Silicon: уровень теплового давления
sudo powermetrics --samplers thermal -n 1-n 1 — один замер. На Intel в выводе ищите строки CPU die temperature и Fan. На Apple Silicon — строку Current pressure level: Nominal означает норму.
**** SMC sensors ****
CPU Thermal level: 0
Fan: 1200 rpm
CPU die temperature: 48.31 CКак и в Linux (подробнее в статье Мониторинг температуры в Linux), 90 °C под нагрузкой — не авария. Повод разбираться — высокая температура в простое и CPU_Speed_Limit меньше 100 при обычной работе. Чаще всего это пыль в радиаторе или высохшая термопаста.
Память
memory_pressure: хватает ли памяти
macOS старается занять всю свободную память под кэш, поэтому цифра «занято 28 из 32 ГБ» сама по себе ничего не значит. Важнее «давление на память»:
memory_pressure | tail -n 4Pageins: 1691385
Pageouts: 0
System-wide memory free percentage: 90%System-wide memory free percentage— сколько памяти система считает доступной. 90 % — памяти с запасом;Pageouts: 0— система ни разу не выгружала страницы памяти на диск. Именно ростPageoutsговорит о нехватке памяти;Pageins— сколько страниц прочитано с диска. Сюда входит и обычная загрузка программ, так что большое число — нормально.
vm_stat: из чего состоит память
vm_stat | head -n 7Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 1001227.
Pages active: 3301417.
Pages inactive: 2611321.
Pages speculative: 706021.
Pages throttled: 0.
Pages wired down: 767942.vm_stat показывает всё в страницах. Размер страницы написан в первой строке: на моём Intel это 4096 байт, на Apple Silicon — 16384. Пересчитать в гигабайты можно так:
vm_stat | awk '/page size/ {ps=$8} /^Pages (free|active|inactive|speculative|wired)/ {split($0,a,":"); printf "%-20s %5.1f ГБ\n", a[1], $NF*ps/1073741824}'Скрипт берёт размер страницы из заголовка, поэтому работает и на Intel, и на Apple Silicon.
Pages free 3.8 ГБ
Pages active 12.6 ГБ
Pages inactive 10.0 ГБ
Pages speculative 2.7 ГБ
Pages wired down 2.9 ГБ- free — совсем свободно;
- active — используется прямо сейчас;
- inactive — использовалось недавно, система отдаст эту память по первому требованию;
- speculative — прочитано с диска «на всякий случай», тоже легко освобождается;
- wired down — память ядра и драйверов, её нельзя выгрузить.
Вместе это почти ровно 32 ГБ. Свободной памяти «всего» 3,8 ГБ, но ещё почти 13 ГБ (inactive и speculative) система освободит мгновенно. Поэтому memory_pressure и показывает 90 %.
Подкачка и объём памяти
sysctl vm.swapusage hw.memsizevm.swapusage: total = 0,00M used = 0,00M free = 0,00M (encrypted)
hw.memsize: 34359738368hw.memsize — объём памяти в байтах: 34 359 738 368 ÷ 1024³ = 32 ГБ. vm.swapusage — сколько занято в файлах подкачки. У меня ноль: macOS создаёт их только при нехватке памяти. Если used растёт до нескольких гигабайт, а Pageouts не стоит на месте — памяти мало, и тормоза идут отсюда. Ещё хуже, если при этом медленный диск: подкачка упирается прямо в него.
Диск
На Mac с медленным или переполненным диском тормозит вообще всё: программы, набор текста, курсор. Это та самая проблема, с которой я разбирался в статьях про TRIM и про дешёвый SSD.
Свободное место
df -h /System/Volumes/DataFilesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 223Gi 160Gi 49Gi 77% 993k 518M 0% /System/Volumes/DataСмотрите именно на том /System/Volumes/Data: там лежат ваши файлы и программы. Команда df -h / покажет системный том, а он занимает всего около 10 ГБ и почти не меняется. Держите свободными хотя бы 20–25 % диска, на бюджетных SSD — больше. Как найти и удалить лишнее, рассказываю в статье Как освободить место на Mac через Терминал.
iostat: нагрузка на диск
iostat -d -c 3-d— только диски, без процессора;-c 3— три замера с интервалом в секунду. Интервал задаётся ключом-w, напримерiostat -d -w 5.
disk0 disk2
KB/t tps MB/s KB/t tps MB/s
20.22 91 1.79 3.71 0 0.00
4.48 25 0.11 0.00 0 0.00
0.00 0 0.00 0.00 0 0.00KB/t— средний размер одной операции;tps— операций в секунду;MB/s— скорость.
Первая строка — среднее с момента загрузки, следующие — текущие замеры. Мой disk0 — это SSD, и в момент замера он почти простаивал.
iostat показывает, сколько диск делает, но не показывает, как долго он отвечает. Во время тормозов из-за BX500 у меня было 5–9 МБ/с при паре десятков операций в секунду. Цифры выглядели скромно и не пугали, хотя Mac почти не отвечал. Настоящую причину показала следующая команда.
fs_usage: сколько ждёт каждая операция
sudo fs_usage -w -f diskio-w— широкий вывод, без обрезки колонок;-f diskio— только операции с диском.
Остановить поток строк — ⌃ Control + C. Можно следить за одним процессом, дописав его имя или PID в конец: sudo fs_usage -w -f diskio mds_stores.
Вот что fs_usage показывал на моём iMac утром, когда он еле отвечал:
WrMeta[AP] D=0x0008b6d9 B=0x1000 /dev/disk1 0.327340 W kernel_task
WrMeta[AP] D=0x0008b767 B=0x1000 /dev/disk1 0.327336 W kernel_task
PgIn[AT3U] D=0x01ad9cc8 B=0x20000 /dev/disk1s1 0.529323 W mds_storesИ вечером того же дня, когда всё снова работало:
WrMeta[AP] D=0x00007669 B=0x2000 /dev/disk1 0.000100 W kernel_task
WrMeta[AP] D=0x0000767d B=0x4000 /dev/disk1 0.000187 W kernel_task- первая колонка — тип операции:
WrMeta— запись служебных данных файловой системы,PgIn— чтение страницы с диска; B=0x1000— размер в байтах в шестнадцатеричной записи:0x1000= 4 КБ;- предпоследнее число — сколько секунд операция ждала диск;
- в конце — процесс, который обращался к диску.
Запись 4 КБ за 0,33 секунды вместо 0,0001 — разница больше чем в тысячу раз. Для SSD нормальные значения — десятитысячные и тысячные доли секунды. Если вы видите десятые, проблема в диске, а не в программах.
TRIM и SMART
Подключение SATA-диска, поддержку TRIM и общий статус SMART показывает system_profiler:
system_profiler SPSerialATADataType | grep -E 'Model|TRIM|S.M.A.R.T|Link Speed' Link Speed: 6 Gigabit
Negotiated Link Speed: 6 Gigabit
Model: CT240BX500SSD1
TRIM Support: Yes
S.M.A.R.T. status: VerifiedNegotiated Link Speed: 6 Gigabit— диск работает на полной скорости SATA III. Значение 1,5 или 3 Gigabit — повод проверить шлейф;TRIM Support: Yes— TRIM включён. На сторонних SSD macOS сама его не включает, нужна командаsudo trimforce enable. Подробности — в статье про TRIM и сброс NVRAM;S.M.A.R.T. status: Verified— диск не сообщает о сбое.
У NVMe-дисков, в том числе встроенных в Mac с Apple Silicon, раздел называется SPNVMeDataType. Короткую сводку о системном томе даёт diskutil:
diskutil info / | grep -E 'Device Node|File System|Solid State|SMART' Device Node: /dev/disk1s4s1
File System Personality: APFS
SMART Status: Verified
Solid State: YesVerified значит только «диск жив». Износ, ошибки и скрытую запись показывает smartctl из пакета smartmontools. Я ставлю его через Homebrew (подробно о нём — в статье Homebrew на Mac):
brew install smartmontools
sudo smartctl -a disk0На Mac с Intel Homebrew живёт в /usr/local, на Apple Silicon — в /opt/homebrew. Если после установки smartctl не находится, на Apple Silicon проверьте, что в ~/.zprofile есть строка eval "$(/opt/homebrew/bin/brew shellenv)". На Intel Homebrew больше не выпускает готовые пакеты, так что smartmontools соберётся из исходников. Это займёт несколько минут.
Что смотреть в выводе smartctl на моём BX500:
| Показатель | Значение у меня | Что значит |
|---|---|---|
| Percent_Lifetime_Remain | 90 % | остаток ресурса |
| Reallocate_NAND_Blk_Cnt | 0 | переназначенных блоков нет |
| Reported_Uncorrect | 0 | неисправимых ошибок чтения нет |
| UDMA_CRC_Error_Count | 0 | шлейф и разъём в порядке |
| Unexpect_Power_Loss_Ct | 38 | внезапные отключения питания |
| Temperature_Celsius | 51 °C | норма |
Названия строк у разных производителей отличаются. Главное правило: счётчики ошибок и переназначенных блоков должны быть нулевыми или хотя бы не расти.
Сон и питание
pmset -g: текущие настройки и кто мешает сну
pmset -gSystem-wide power settings:
Currently in use:
standby 1
womp 0
powernap 0
sleep 1 (sleep prevented by sharingd, Claude)
hibernatemode 3
disksleep 0
ttyskeepawake 1
displaysleep 180
tcpkeepalive 1sleep 1— через сколько минут простоя засыпает система. Ноль — никогда;displaysleep 180— через сколько минут гаснет экран;disksleep 0— диск не останавливается (для SSD это и не нужно);powernap 0— Power Nap выключен, во сне Mac не проверяет почту и не синхронизирует iCloud;womp 0— пробуждение по сети выключено;ttyskeepawake 1— пока открыт удалённый сеанс, например по SSH, Mac не уснёт.
Самое интересное — в скобках: sleep prevented by sharingd, Claude. Mac должен уснуть через минуту, но два процесса это запретили. sharingd — служба общего доступа: AirDrop, Handoff, общий буфер обмена. Claude — приложение, которое было открыто и работало. Как только они снимут запрет, Mac уснёт по расписанию.
pmset -g assertions: подробности о запретах
Каждый такой запрет в macOS называется assertion. Список с причинами показывает команда:
pmset -g assertionsAssertion status system-wide:
PreventUserIdleDisplaySleep 0
PreventSystemSleep 0
PreventUserIdleSystemSleep 1
ExternalMedia 0
UserIsActive 1
Listed by owning process:
pid 412(sharingd): [0x…] 00:12:31 PreventUserIdleSystemSleep named: "…"
pid 2210(Claude): [0x…] 01:05:10 PreventUserIdleSystemSleep named: "…"PreventUserIdleSystemSleep 1— кто-то не даёт системе уснуть от простоя;PreventUserIdleDisplaySleep 1— кто-то не даёт погаснуть экрану. Так обычно делают видеоплееры и программы для созвонов;- в разделе
Listed by owning process— PID и имя процесса, сколько длится запрет и его описание.
Если Mac не засыпает, найдите здесь процесс-нарушитель и закройте его. Свои запреты можно ставить и вручную: команда caffeinate -i не даёт Mac уснуть, пока работает. Выход — ⌃ Control + C.
pmset -g log: когда засыпал, просыпался и выключался
pmset -g log — журнал всех событий питания. Он длинный, поэтому фильтруйте:
pmset -g log | grep -E 'Sleep |Wake |Shutdown' | tail -n 82026-10-12 12:25:02 +0300 ShutdownCause SMC shutdown cause: 5: Software initiated shutdown
2026-10-12 16:16:45 +0300 ShutdownCause SMC shutdown cause: 5: Software initiated shutdown
2026-10-12 20:15:59 +0300 Sleep Entering Sleep state due to 'Idle Sleep':TCPKeepAlive=active Using AC (Charge:0%) 605 secs
2026-10-12 20:26:04 +0300 Wake Wake from Normal Sleep [CDNVA] : due to XHC2 XHC1/HID Activity Using AC (Charge:0%)
PreventUserIdleSystemSleep 1ShutdownCause … 5: Software initiated shutdown— Mac выключили программно: через меню Apple или командой. Это штатное завершение работы. Если Mac выключается сам, первым делом смотрите сюда: код, отличный от 5, — повод разбираться с питанием или перегревом;Entering Sleep state due to 'Idle Sleep'— уснул от простоя, а605 secs— сколько длился сон: с 20:15:59 до 20:26:04, ровно 10 минут 5 секунд;Wake … due to XHC2 XHC1/HID Activity— разбудило устройство ввода через USB (XHC— контроллер USB,HID— мышь или клавиатура). Если Mac просыпается сам по ночам, именно эта причина подскажет, кто будит;Charge:0%— у настольного iMac нет батареи, на это не обращайте внимания;- последняя строка — сводка запретов из журнала: тот же
PreventUserIdleSystemSleep.
Чтобы посмотреть только причины пробуждений, используйте pmset -g log | grep 'Wake from'.
Системный журнал
В macOS вместо текстовых логов — единый журнал, похожий на journald в Linux (о нём есть статья systemd и journalctl). Читается он командой log.
log show: ошибки за последний час
log show --last 1h --predicate 'messageType == error' --style compact | tail -n 8--last 1h— за последний час (можно30m,2d);--predicate 'messageType == error'— только ошибки;--style compact— короткий формат строк.
2026-10-12 22:04:31.758 E ContinuityCaptureAgent[358:312e8] [com.apple.CMContinuityCapture:default] CMContinuityCaptureUserOnboarding No valid device to onboard
2026-10-12 22:04:32.068 E ContextStoreAgent[421:31423] (CoreDuet) Simulating crash. Reason: <private>
2026-10-12 22:04:34.662 E kernel[0:31423] [com.apple.sandbox.reporting:violation] 1 duplicate report for System Policy: du(4052) deny(1) file-read-data /Users/nixlife/.Trash
2026-10-12 22:04:35.054 E ContinuityCaptureAgent[358:312e8] [com.apple.CMContinuityCapture:device] Missing CMContinuityCaptureCapabilitiesKey_DevicesСлова «crash» и «violation» пугают, но всё это безобидно:
ContinuityCaptureAgent … No valid device to onboard— служба «Камеры Continuity» не нашла iPhone, который можно использовать как веб-камеру;ContextStoreAgent … Simulating crash— служба CoreDuet записала диагностику для Apple, сама программа при этом не упала;sandbox … du deny file-read-data /Users/nixlife/.Trash— это моя же командаduпыталась заглянуть в Корзину. У Терминала не было «Полного доступа к диску», и система отказала. Такие строки появляются, когда команда упирается в защиту приватности macOS.
Ещё несколько полезных фильтров:
# Сообщения ядра за 10 минут
log show --last 10m --predicate 'process == "kernel"'
# Всё от одного процесса
log show --last 1h --predicate 'process == "sharingd"' --style compactlog stream: журнал в реальном времени
log stream --predicate 'messageType == error' --style compactЗапустите, воспроизведите проблему и посмотрите, что появится в эти секунды. Остановить — ⌃ Control + C.
Отчёты о сбоях
Когда программа падает, macOS сохраняет отчёт в файл .ips. Пользовательские отчёты лежат в ~/Library/Logs/DiagnosticReports, системные — в /Library/Logs/DiagnosticReports:
ls -lt ~/Library/Logs/DiagnosticReports | head -n 10com.apple.SafariPlatformSupport.Helper-2026-10-07-133909.ips
MTLCompilerService-2026-10-07-195650.ips
RetiredВ имени файла — процесс и время сбоя. В папке Retired система хранит старые отчёты, которые уже обработала. Если одно и то же имя повторяется каждый день, проблема именно в этой программе: обновите или переустановите её.
Файл .ips — текст в формате JSON. Удобнее всего открыть его в программе «Консоль» с разделом «Отчёты о сбоях»:
open -a Console ~/Library/Logs/DiagnosticReports/MTLCompilerService-2026-10-07-195650.ipsОтчёты о панике ядра, после которых Mac перезагружается сам, лежат в /Library/Logs/DiagnosticReports, и в их имени есть слово panic.
sysdiagnose: полный отчёт для поддержки
Если причину найти не удалось и вы собираетесь обращаться в поддержку Apple или к мастеру, соберите полный диагностический архив:
sudo sysdiagnoseСбор занимает несколько минут, в конце команда покажет путь к архиву .tar.gz (обычно в /var/tmp). То же самое запускает сочетание ⇧ Shift + ⌃ Control + ⌥ Option + ⌘ Command + .. В архив попадают журналы, настройки и список процессов, поэтому отправляйте его только тем, кому доверяете.
Симптом → что запустить
| Симптом | Команда | На что смотреть |
|---|---|---|
| Тормозит всё, шумит вентилятор | top -l 2 -n 10 -o cpu -stats pid,command,cpu,mem | процесс с высоким %CPU во втором замере |
| Сначала быстро, потом вяло | pmset -g therm | CPU_Speed_Limit меньше 100 |
| Горячий корпус | sudo powermetrics --samplers smc -n 1 | CPU die temperature, Fan |
| Программы долго переключаются | memory_pressure, sysctl vm.swapusage | процент свободной памяти, рост Pageouts и подкачки |
| Тормозит даже курсор и набор текста | sudo fs_usage -w -f diskio | задержки в десятые доли секунды |
| Mac со сторонним SSD тормозит | system_profiler SPSerialATADataType | TRIM Support, Link Speed |
| Подозрение на износ диска | sudo smartctl -a disk0 | ошибки, переназначенные блоки, ресурс |
| Не засыпает | pmset -g, pmset -g assertions | sleep prevented by …, Listed by owning process |
| Просыпается сам | pmset -g log | grep 'Wake from' | причина после due to |
| Выключается сам | pmset -g log | grep ShutdownCause | код, отличный от 5 |
| Падает программа | ls -lt ~/Library/Logs/DiagnosticReports | повторяющиеся имена .ips |
| Непонятно, что происходит | log stream --predicate 'messageType == error' | ошибки в момент проблемы |
Шпаргалка команд
| Команда | Что делает |
|---|---|
uptime | время работы и load average |
sysctl -n hw.ncpu | число логических процессоров |
ps aux | sort -nrk 3,3 | head | процессы по загрузке процессора |
pmset -g therm | ограничение частоты из-за температуры |
memory_pressure | давление на память |
vm_stat | распределение памяти по страницам |
sysctl vm.swapusage hw.memsize | подкачка и объём памяти |
df -h /System/Volumes/Data | свободное место |
iostat -d -w 1 | нагрузка на диски каждую секунду |
diskutil info / | файловая система, SSD, статус SMART |
mdutil -s / | статус индексации Spotlight |
pmset -g | настройки сна и питания |
caffeinate -i | временно запретить сон |
log show --last 1h | системный журнал за час |
sudo sysdiagnose | полный архив для поддержки |
Частые ошибки
- Верить нулям в
top -l 1. С одним замером процент загрузки не считается. Нужно-l 2и второй блок. - Пугаться load average больше 1. На Mac с 8 или 12 потоками нагрузка 2–3 — это легко. Сравнивайте с
hw.ncpu. - Считать, что «вся память занята» — плохо. macOS специально заполняет её кэшем. Смотрите на
memory_pressureи подкачку. - Смотреть
df -h /вместо тома с данными. Системный том почти пустой и не меняется, место заканчивается на/System/Volumes/Data. - Считать
Verifiedгарантией здоровья диска. Это только «диск не сообщает о сбое». Подробности — вsmartctl. - Искать причину в каждой ошибке журнала. Важны только ошибки, совпадающие по времени с проблемой.
- Ставить
kill -9на всё подряд. Сначала обычныйkill: он даёт программе сохранить данные.
Mac тормозит: 7 шагов
Частые вопросы
Почему в top у всех процессов 0 % загрузки?
Вы запустили top -l 1. Процент загрузки — разница между двумя замерами, поэтому в первом он всегда нулевой. Используйте top -l 2 и смотрите на второй блок.
Какой load average нормальный для Mac?
Всё, что меньше числа логических процессоров, которое показывает sysctl -n hw.ncpu. Для 12 потоков нагрузка 2,5 — это около 20 % возможностей.
Как проверить, что Mac сбрасывает частоту из-за перегрева?
Командой pmset -g therm. Если CPU_Speed_Limit меньше 100, процессор работает медленнее из-за температуры. Саму температуру на Intel показывает sudo powermetrics --samplers smc -n 1.
Почему vm_stat показывает мало свободной памяти, хотя Mac не тормозит?
macOS держит в памяти кэш и освобождает его по требованию. Смотрите на memory_pressure: пока доступно больше 50 %, а подкачка не растёт, памяти хватает.
Как узнать, кто не даёт Mac уснуть?
Командой pmset -g — виновники перечислены в скобках после строки sleep. Подробный список с PID и причинами показывает pmset -g assertions.
Почему Mac просыпается сам по себе?
Посмотрите pmset -g log | grep 'Wake from'. Причина пишется после due to: например, HID Activity — мышь или клавиатура, а XHC — устройство на шине USB.
Ошибки в log show — это проблема?
Обычно нет. macOS пишет в журнал множество служебных ошибок, даже когда всё работает. Важны ошибки, которые совпадают по времени с проблемой или повторяются у одного процесса.
Где найти отчёты о сбоях программ?
В ~/Library/Logs/DiagnosticReports и /Library/Logs/DiagnosticReports, файлы с расширением .ips. Удобнее всего открыть их в программе «Консоль».
Если статья пригодилась — отметьте, это помогает выбирать темы
Статья помогла?
Комментарии
Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.