Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

IT Support & Help Desk Fundamentals  Module 6 – macOS and Linux client administration

macOS troubleshooting: Activity Monitor to logs

Find the process behind a slow Mac, read memory pressure, search the unified log by time, rule out the disk and hardware, and send only the report needed.

  • Intermediate
  • 15 minutes
  • Examples run with Python 3.14.8 and Pyodide 314.0.7
  • By MySmartCoPilot
Free lesson, Pro answers: 15 minutes
Free: the whole lesson. With a pass: the model answers to its 2 interview questions.

What you will learn

  • Find runaway processes and memory pressure with Activity Monitor and Terminal
  • Search the unified log with Console and log show, by time first and then by process
  • Repair disks with Disk Utility First Aid and test hardware with Apple Diagnostics
  • Choose the report an escalation needs, from a process sample to a sysdiagnose archive

Before you start

What you’ll learn · Before you start

What you will learn

  • Find runaway processes and memory pressure with Activity Monitor and Terminal
  • Search the unified log with Console and log show, by time first and then by process
  • Repair disks with Disk Utility First Aid and test hardware with Apple Diagnostics
  • Choose the report an escalation needs, from a process sample to a sysdiagnose archive

Before you start

On this page

“My Mac is slow every afternoon” is the call a Mac desk takes most, and it hides four different causes: one app using a whole processor core, memory that has run out, a disk with errors, or a fault in the hardware. Each leaves its own trace, in Activity Monitor, in the memory readings, in the unified log or in a disk check, and the order in which you read them decides whether the ticket takes ten minutes or a week.

You will find the busy process and quit it safely, read memory pressure the way Apple means it, turn a user’s “around two o’clock” into a log show command, run First Aid in the right order, and pick the report an escalation needs without sending a whole Mac’s worth of personal data to someone who asked for one line.

Activity Monitor names the process behind a busy Mac

Most of the time a Mac’s processor does little, and a slow Mac usually has one process doing too much. Activity Monitor’s CPU tab lists every process with its % CPU; sorting that column puts the culprit at the top. The figures under the list split the load three ways, in Apple’s words: User, used by apps the person opened and the processes they start; System, used by macOS itself; and Idle, what is left.

The other tabs answer the next questions. Energy shows each app’s Energy Impact, lower being better, and whether it is preventing sleep, which explains a laptop that drains overnight. Disk and Network show what reads, writes, sends and receives. Step through the order this lesson works a slow-Mac ticket:

Interactive · stage by stage Working a slow Mac from the busiest process to the hardware Step through one slow-Mac ticket. Each step reads one thing and decides whether the next is needed.
Working a slow Mac from the busiest process to the hardware, step 6 of 6. Showing Activity Monitor: CPU, Memory pressure, Energy and Disk tabs, The log at that time, First Aid, Diagnostics. In focus: First Aid, Diagnostics.one app: quitred: more RAMActivity Monitor: CPUwhich process is busy?Memory pressuregreen, yellow or red?Energy and Disk tabswhat keeps it busy?The log at that timeerrors at that timeFirst Aid, Diagnosticsdisk or hardware?

The drawing shows the whole scene; its 6 steps are listed below.

Every step as text
  1. Find the busy process. Open Activity Monitor and sort the CPU tab by % CPU. User is the share used by apps the person opened, System the share used by macOS itself, Idle what is left. One app at the top of a long list is the usual answer.
  2. Quit before Force Quit. Quit asks the app to close when it is safe to; Force Quit stops it at once and can lose open files. Try Quit first, and save the user's work if the app still responds.
  3. Read the pressure graph. In the Memory tab, Apple's graph says it plainly: green means the RAM is used efficiently, yellow that the Mac might need more RAM later, red that it needs more RAM now.
  4. What keeps it busy. The Energy tab shows each app's Energy Impact and whether it is preventing sleep; the Disk tab shows what is reading and writing. A backup or an index running in the background shows up here.
  5. Read the log for that moment. When the slowness came and went, the log of those minutes says more than the Mac does now. Console shows errors with a yellow dot and faults with a red one; log show reads the same messages by time.
  6. Rule out the disk and hardware. When the log points at the disk, run First Aid on each volume, then the container, then the device. When it points at hardware, Apple Diagnostics tests the Mac itself.

Stopping a process has two strengths. Quit asks it to close when that is safe, the same as File, Quit in the app, and it does not quit when closing could lose data. Force Quit: Stopping an app or process at once, from Activity Monitor or with Option-Command-Esc, instead of asking it to quit. It can lose the files the app has open, so Quit is tried first. stops it at once and can lose the files it has open; Option-Command-Esc opens the Force Quit window for apps. A process marked Not Responding, in red, is the case for Force Quit, after the user’s unsaved work has been dealt with. Quitting a process that belongs to another user may ask for an administrator.

In Terminal, top -o cpu shows the same list busiest first (by default top sorts by process ID), and ps takes a snapshot of processes; both have manual pages on the Mac. They list every user’s processes and the commands that started them, which is why their output belongs on the technician’s screen, not in a shared ticket.

Memory pressure, not free memory, says whether a Mac needs RAM

A user reads “Memory Used: 47 GB of 48 GB” and asks for an upgrade. Apple’s guide answers that free memory does not by itself improve performance: macOS gets its best performance by using all of its memory. The measure that counts is memory pressure: Activity Monitor's measure of how well a Mac's memory meets its needs, worked out from free memory, swap rate, wired memory and file-cached memory, and shown green, yellow or red., which Apple says is worked out from the free memory, the swap rate, the wired memory and the file-cached memory. Its graph in Activity Monitor’s Memory tab has three colours: green, all RAM used efficiently; yellow, the Mac might eventually need more RAM; red, it needs more RAM.

Line in the Memory tab What it counts
App Memory memory apps are using
Wired Memory memory macOS must keep in RAM, unavailable to apps
Compressed memory squeezed to make room for active apps
Cached Files files kept in unused memory to reopen faster
Swap Used space on the startup disk used to swap memory out

Terminal reads the same counts. The session below took four readings on the lesson’s Mac; they change from second to second, so the page shows one moment:

Memory installed, and four readings of how it is used now Python · mac-session/memory_session.py
from session import run

# How much memory this Mac has and how it is being used right now: memory_pressure's total and free share, the swap
# in use, and four of vm_stat's page counts. The readings change from second to second while the Mac works.
run(
    """
memory_pressure -Q
sysctl vm.swapusage
vm_stat | grep -E '^Pages (free|active|wired down|occupied by compressor):'
"""
)

Output

$ memory_pressure -Q
The system has 51539607552 (3145728 pages with a page size of 16384).
System-wide memory free percentage: 42%
$ sysctl vm.swapusage
vm.swapusage: total = 13312.00M  used = 12633.12M  free = 678.88M  (encrypted)
$ vm_stat | grep -E '^Pages (free|active|wired down|occupied by compressor):'
Pages free:                                    34819.
Pages active:                                 647057.
Pages wired down:                             301297.
Pages occupied by compressor:                1455051.

This output changes from run to run: The free share, the swap in use and the page counts change from second to second while the Mac works, so each run prints its own moment.

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 memory_session.py

memory_pressure -Q starts with the total: 51,539,607,552 bytes in 3,145,728 pages of 16,384 bytes, exactly 48 GiB. Its second line is the share of memory the system counts as free, vm.swapusage says how much of the startup disk holds swapped memory, and vm_stat counts pages: free, active, wired down and those the compressor occupies. Compressing inactive apps’ memory is how macOS makes room for active ones, Apple says, so a large compressor figure with little free memory is no fault on its own; only pressure that stays red, with the swap growing, makes the case for more RAM.

Ordering RAM because free memory is low

Wrong: Activity Monitor shows almost no free memory, so the Mac gets an upgrade request. Right: macOS uses spare RAM for caches and compression on purpose; check the pressure graph over a working day, and ask for RAM only when it stays red while the user works.

Checkpoint

Check: Finding the busy process · Memory pressure

  1. Question 1 of 2 A spreadsheet app sits at the top of the CPU tab and the user has unsaved work in it. What do you try first?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Quit, which closes the app only when that is safe

    Save or let the user save what can be saved, try Quit, and keep Force Quit, Option-Command-Esc, for an app that is Not Responding.

  2. Question 2 of 2 Activity Monitor shows little free memory and a green memory pressure graph all day. What do you tell the user who wants more RAM?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: The Mac uses its RAM efficiently; more RAM would not help this workload

    Yellow means the Mac might eventually need more RAM, red that it needs more now. Only red that lasts through the user's normal work makes the case for an upgrade.

The unified log is read by time first, then by process

macOS writes the messages of the system and of apps into one unified log: The single store of log messages that macOS and its apps write. Console shows it, and log show reads it in Terminal, narrowed by time and by keys such as process or subsystem.. Console shows it: pick the device, click Start, and each message has a type, marked by a dot, yellow for errors and red for faults. Apple notes that a user who is not an administrator must enter an administrator’s name and password to see the messages. Searching works on text, and the search field’s filters can keep one process or leave one out.

The same messages come out in Terminal with log show, and man log on the Mac lists what narrows them. Time comes first, because a Mac writes thousands of messages a minute:

Option What it keeps
--last 30m the last 30 minutes, or --last boot since the last start
--start and --end a window, as "YYYY-MM-DD HH:MM:SS", with an optional UTC offset
--predicate messages matching keys such as process, subsystem or messageType
--style compact one shorter line per message

A log predicate: A filter for log show or log stream that compares keys of each message, such as process, subsystem or messageType, with values, as in process == "Mail". compares those keys with values, as process == "Mail"; messageType takes default, info, debug, error or fault. The program below turns three tickets into commands. The predicate goes inside single quotes so the shell hands it to log in one piece, and names with spaces go inside double quotes:

Three tickets turned into log show commands Python · log-command/log_command.py
"""Three tickets turned into log show commands. Each ticket gives the window to read, in the date and time form
man log accepts ("YYYY-MM-DD HH:MM:SS" followed by the UTC offset, such as +05:30), and a process or a subsystem to keep. The predicate is
built from the keys man log documents, and the whole predicate is wrapped in single quotes so the shell passes it to
log in one piece, with names that contain spaces inside double quotes."""

TICKETS = [
    ("Photo Booth closes when the camera starts", "2026-09-14 14:00:00+05:30", "2026-09-14 14:20:00+05:30",
     {"process": "Photo Booth"}),
    ("Mail stopped fetching after lunch", "2026-09-14 13:30:00+05:30", "2026-09-14 14:00:00+05:30",
     {"process": "Mail"}),
    ("An app's own messages, by subsystem", "2026-09-14 09:00:00+05:30", "2026-09-14 09:15:00+05:30",
     {"subsystem": "com.example.notes"}),
]


def predicate(keep):
    """One clause per key, joined with &&, each value in double quotes (a double quote inside is escaped)."""
    clauses = []
    for key in ("process", "subsystem"):
        if key in keep:
            value = keep[key].replace("\\", "\\\\").replace('"', '\\"')
            clauses.append(f'{key} == "{value}"')
    return " && ".join(clauses)


for title, start, end, keep in TICKETS:
    print(f"# {title}")
    print(f"log show --style compact --start '{start}' --end '{end}' --predicate '{predicate(keep)}'")

Output

# Photo Booth closes when the camera starts
log show --style compact --start '2026-09-14 14:00:00+05:30' --end '2026-09-14 14:20:00+05:30' --predicate 'process == "Photo Booth"'
# Mail stopped fetching after lunch
log show --style compact --start '2026-09-14 13:30:00+05:30' --end '2026-09-14 14:00:00+05:30' --predicate 'process == "Mail"'
# An app's own messages, by subsystem
log show --style compact --start '2026-09-14 09:00:00+05:30' --end '2026-09-14 09:15:00+05:30' --predicate 'subsystem == "com.example.notes"'

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 log_command.py

Each command reads only the minutes the user described, with the UTC offset the ticket gives, so the window is the same whatever time zone the Mac is set to. The offset follows the ZZZZZ form of Unicode’s date patterns, such as +05:30. A user’s “around two” in India becomes --start '2026-09-14 14:00:00+05:30', and the timezone converter checks the same moment for a user in another city.

Checkpoint

Check: Reading the unified log

  1. One question A user in India says Mail stopped fetching "around half past one" this afternoon. What should narrow the log first?

    Choose one answer.

    Show the answer: One question

    Answer: A time window with --start and --end around 13:30 with +05:30, then a predicate on process "Mail"

    --start and --end twenty minutes apart around 13:30, each with the offset +05:30, and the predicate process == "Mail" read only those minutes for that process.

First Aid and Apple Diagnostics rule out the disk and the hardware

When the log shows file errors, or apps quit at random, the disk is next. Apple’s Disk Utility guide says First Aid can fix certain problems, such as apps that quit unexpectedly, a corrupted file or a Mac that will not start up, though not all. The order is exact: First Aid: The Disk Utility function on a Mac that checks a volume, a container or a whole storage device for errors and repairs what it can. Apple's order is each volume, then the container, then the device. on each volume of the device in turn, then on each container, then on the storage device itself. The startup disk is checked from macOS Recovery, and the order of those steps is in boot problems and recovery.

Before any of that, read what the drive says about itself:

The internal drive and the startup volume, read with diskutil Python · mac-session/disk_session.py
from session import run

# The internal storage device and the volume the Mac runs from, read without changing anything. SMART Status is the
# drive's own health verdict, which Disk Utility also shows.
run(
    """
diskutil info disk0 | grep -E "Device / Media Name|Protocol|Solid State|SMART Status"
diskutil info / | grep -E "Volume Name|File System Personality|Volume Read-Only"
"""
)

Output

$ diskutil info disk0 | grep -E "Device / Media Name|Protocol|Solid State|SMART Status"
   Device / Media Name:       APPLE SSD AP1024Z
   Protocol:                  Apple Fabric
   SMART Status:              Verified
   Solid State:               Yes
$ diskutil info / | grep -E "Volume Name|File System Personality|Volume Read-Only"
   Volume Name:               Macintosh HD
   File System Personality:   APFS
   Volume Read-Only:          Yes (read-only mount flag set)

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 disk_session.py

The internal device is an APPLE SSD AP1024Z over Apple Fabric, solid state, with SMART Status Verified, and the startup volume is the read-only APFS volume Macintosh HD. When Disk Utility reports instead that a disk is about to fail, Apple’s advice is short: back up the data and replace the disk, because it cannot be repaired.

When nothing points at the disk but the Mac still misbehaves, Apple Diagnostics: Apple's built-in hardware test for a Mac, started from the startup options with Command-D on Apple silicon or by holding D on an Intel Mac, to find which component may be at fault. helps find which hardware component is at fault. On Apple silicon, hold the power button until the startup options appear, then hold Command-D; on an Intel Mac, hold D as it starts. The preparation and what to do with its results are in hardware faults. Safe mode, which separates a fault in the system from one in what was added to it, is in the boot lesson too.

Checkpoint

Check: First Aid and Apple Diagnostics

  1. One question In which order does Disk Utility run First Aid on a storage device?

    Choose one answer.

    Show the answer: One question

    Answer: Each volume, then each container, then the storage device

    The startup disk is checked from macOS Recovery. A disk that Disk Utility says is about to fail is backed up and replaced, because it cannot be repaired.

An escalation carries the report it needs, and no more

A ticket that goes to the next tier, to Apple or to a vendor needs evidence, and every report trades detail against personal data. System Information, and system_profiler in Terminal, export a Mac’s hardware and software. Its manual lists a detail level, mini, described as a report with no personal information. The session shows the difference without printing anything personal: first the names of the fields the full software report fills in, then the report at mini:

The fields of a full software report, and the mini report Python · mac-session/report_session.py
from session import run

# What a System Information software report would carry. The first line prints only the names of the fields the full
# report fills in; the second prints the report at the detail level system_profiler's manual calls "mini", which it
# describes as a report with no personal information.
run(
    """
system_profiler SPSoftwareDataType | cut -d: -f1 | sed "s/^ *//" | grep -v "^$"
system_profiler -detailLevel mini SPSoftwareDataType | grep -v "Time since boot"
"""
)

Output

$ system_profiler SPSoftwareDataType | cut -d: -f1 | sed "s/^ *//" | grep -v "^$"
Software
System Software Overview
System Version
Kernel Version
Boot Volume
Boot Mode
Computer Name
User Name
Secure Virtual Memory
System Integrity Protection
Time since boot
$ system_profiler -detailLevel mini SPSoftwareDataType | grep -v "Time since boot"
Software:

    System Software Overview:

      System Version: macOS 26.7.1 (25G241)
      Kernel Version: Darwin 25.6.0

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 report_session.py

The full report has a Computer Name and a User Name among the eleven names it prints; the mini report keeps the macOS and kernel versions, and the time since the last start, left out here because it changes. The largest report is a sysdiagnose: A macOS tool, run as root, that gathers a large archive of a Mac's state, logs, crash reports and configuration for Apple or a vendor to investigate a problem. archive, which man sysdiagnose says gathers a great deal of the system’s state: a spindump, several seconds of top, recent system logs, a System Profiler report, recent crash reports, disk usage and network status. It runs as root and saves the archive in /var/tmp. Activity Monitor offers a smaller tool, Sample Process, a report on one process over 3 seconds.

Redact before a ticket, not after

Log lines and reports can name files, people, servers and addresses. Read what you attach, cut what the question does not need, and run text through the PII redactor before it goes into a shared ticket.

Two questions about the escalation decide what to send:

Interactive · answer and compare What should go with this escalation? Answer two questions about the escalation. The table marks what fits and says why the rest is out.
Who will read what you send?
What do you know about the problem?

Answer the questions above: the table then marks what fits your case and says why the rest does not.

Four reports a technician can attach, against the four things that decide between them
Report Answers Personal data Size Send it when
Sample of one process Made with: Activity Monitor, Sample Process Mixed what one process did for 3 seconds Good one process only Good one small text report Mixed the app is slow or stuck right now
Software report (mini) Made with: system_profiler -detailLevel mini Mixed which macOS and kernel the Mac runs Good no personal information, says the manual Good a few lines Good almost every escalation
Log excerpt Made with: log show for a time window Good what happened in the minutes you chose Mixed messages can name files, people and hosts Good as small as the window and the filter Good the problem had a time and a process
sysdiagnose archive Made with: sysdiagnose, as root Good logs, crash reports, processes and more at once Poor a great deal of the whole Mac's state Poor a large archive in /var/tmp Mixed only when Apple or the vendor asks for it
How the answers decide
  • “Who will read what you send?” A colleague on the next support tier: rules out sysdiagnose archive. An archive of the whole Mac's state is more than a colleague needs, and it carries far more personal data than the question does.
  • “What do you know about the problem?” An app is slow or stuck right now: adds a caveat to Log excerpt. A sample of the busy process shows what it is doing now; a log excerpt needs the minutes to read.
  • “What do you know about the problem?” It happened at a known time: rules out Sample of one process. A 3-second sample of a process says nothing about a moment that has passed; the log of those minutes does.
  • “What do you know about the problem?” Nobody can say when or where and “Who will read what you send?” Apple or the app's vendor, who asked for it: adds a caveat to sysdiagnose archive. When nothing narrows the problem and the vendor has asked, the archive is the right tool, sent with the user's consent through the channel the organisation allows.

In short: a colleague gets the mini report and a log excerpt for the minutes that matter; a 3-second sample serves an app that is stuck now; a sysdiagnose goes only to Apple or a vendor who asked for it, with the user’s consent, through the channel the organisation allows.

Key idea

Send the smallest report that answers the question asked: a version, a window of the log or one process, and a whole-Mac archive only on request.

Checkpoint

Check: Reports for an escalation

  1. Question 1 of 2 A colleague on the next tier asks which macOS a user's Mac runs. What do you send?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: system_profiler -detailLevel mini SPSoftwareDataType, the report with no personal information

    Send the smallest report that answers the question. The version and build are in the mini report and in sw_vers.

  2. Question 2 of 2 When is a sysdiagnose archive the right thing to send?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: When Apple or the vendor asks for it, with the user's consent, through the channel the organisation allows

    man sysdiagnose lists what it collects: a spindump, top output, recent system logs, a System Profiler report, recent crash reports, disk usage and network status.

Practise: a log window for any time zone

A user’s “around 14:05” has to become two exact times before log show can use it. Write the function that turns a reported time and its UTC offset into the --start and --end values, for any number of minutes either side and across midnight, and that refuses a negative window or a time in the wrong form. The self-check after it covers every section.

Exercise · Easy · Python

Turn a reported time into a log window

Write log_window(reported, offset, minutes_before=10, minutes_after=5) so that it returns the --start and --end values for log show around the moment a user reported a problem.

  • reported is the user's date and time as "YYYY-MM-DD HH:MM", such as "2026-09-14 14:05".
  • offset is the user's UTC offset as "+HH:MM" or "-HH:MM", such as "+05:30".
  • Return a tuple of two strings in the form man log gives, "YYYY-MM-DD HH:MM:SS" followed by the offset as it was given: log_window("2026-09-14 14:05", "+05:30") returns ("2026-09-14 13:55:00+05:30", "2026-09-14 14:10:00+05:30").
  • A window that crosses midnight moves the date too.

Raise ValueError when either number of minutes is negative, or when reported or offset is not in its form.

Starter code · log_window.py

def log_window(reported, offset, minutes_before=10, minutes_after=5):
    """Return the --start and --end strings for log show around a reported time, such as ("... 13:55:00+05:30", ...)."""
    return ("", "")
The sample tests · test_log_window.py
from log_window import log_window


def raises_value_error(*args):
    try:
        log_window(*args)
    except ValueError:
        return True
    return False


def test_the_default_window():
    assert log_window("2026-09-14 14:05", "+05:30") == ("2026-09-14 13:55:00+05:30", "2026-09-14 14:10:00+05:30")


def test_a_wider_window():
    assert log_window("2026-09-14 14:05", "+05:30", 30, 15) == ("2026-09-14 13:35:00+05:30", "2026-09-14 14:20:00+05:30")


def test_a_negative_offset():
    assert log_window("2026-03-02 08:00", "-05:00", 5, 5) == ("2026-03-02 07:55:00-05:00", "2026-03-02 08:05:00-05:00")


def test_crossing_midnight():
    assert log_window("2026-09-14 23:58", "+00:00") == ("2026-09-14 23:48:00+00:00", "2026-09-15 00:03:00+00:00")
    assert log_window("2026-09-15 00:04", "+00:00") == ("2026-09-14 23:54:00+00:00", "2026-09-15 00:09:00+00:00")


def test_a_zero_window():
    assert log_window("2026-09-14 14:05", "+05:30", 0, 0) == ("2026-09-14 14:05:00+05:30", "2026-09-14 14:05:00+05:30")


def test_negative_minutes_are_refused():
    assert raises_value_error("2026-09-14 14:05", "+05:30", -1, 5)
    assert raises_value_error("2026-09-14 14:05", "+05:30", 5, -1)


def test_bad_forms_are_refused():
    assert raises_value_error("14:05 on 14 September", "+05:30")
    assert raises_value_error("2026-09-14 14:05", "IST")
    assert raises_value_error("2026-09-14 14:05", "+0530")
A hint

datetime.strptime(reported, "%Y-%m-%d %H:%M") reads the time, and timedelta(minutes=...) moves it, across midnight too. Check the offset with a pattern such as ^[+-]\d\d:\d\d$ before you use it, then build each string with strftime("%Y-%m-%d %H:%M:%S") followed by the offset.

The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.

Practice that adapts to you

Practise this lesson

11 questions about 5 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.

  1. Question 1 of 11 In the CPU tab, what does the User figure count?

    Choose one answer.

    Show the answer: Question 1 of 11

    Answer: The share of CPU used by apps the person opened and the processes they start

    User, System and Idle add up to the whole processor. A high User figure points at an app; a high System figure at macOS.

  2. Question 2 of 11 A laptop's battery is empty every morning although it was asleep. Where do you look first?

    Choose one answer.

    Show the answer: Question 2 of 11

    Answer: The Energy tab, for an app that shows Yes under Preventing Sleep

    Energy Impact, lower being better, and Preventing Sleep are the Energy tab's answers to battery tickets.

  3. Question 3 of 11 You run top in Terminal and the busy process is nowhere near the top. Why?

    Choose one answer.

    Show the answer: Question 3 of 11

    Answer: top sorts by process ID by default; top -o cpu sorts by CPU

    Activity Monitor's CPU tab sorted by % CPU and top -o cpu give the same answer: the busiest process first.

  4. Question 4 of 11 What does Apple say memory pressure is worked out from?

    Choose one answer.

    Show the answer: Question 4 of 11

    Answer: The free memory, the swap rate, the wired memory and the file-cached memory

    That is why pressure can stay green on a Mac with little free memory: the memory is in use, and well used.

  5. Question 5 of 11 memory_pressure -Q reports 3,145,728 pages of 16,384 bytes. How many GiB of memory is that?

    Type a number.

    A hint

    Multiply, then divide by 1,073,741,824 bytes per GiB.

    Show the answer: Question 5 of 11

    Answer: 48 GiB

    3,145,728 × 16,384 = 51,539,607,552 bytes, the total the same line prints, and 51,539,607,552 ÷ 1,073,741,824 = 48 GiB exactly.

  6. Question 6 of 11 Why is the predicate in log show --predicate 'process == "Photo Booth"' wrapped in single quotes?

    Choose one answer.

    Show the answer: Question 6 of 11

    Answer: So the shell passes the whole predicate to log as one argument, double quotes and space included

    The predicate keys come from man log: process, subsystem, category, messageType and eventMessage among them.

  7. Question 7 of 11 A standard user opens Console to read log messages. What happens?

    Choose one answer.

    Show the answer: Question 7 of 11

    Answer: Console asks for an administrator's name and password

    On a support call, the technician enters their own credentials; the user never reads out an administrator password.

  8. Question 8 of 11 In Console, what does a red dot in the Type column mean?

    Choose one answer.

    Show the answer: Question 8 of 11

    Answer: A fault

    log show can keep the same types with the messageType key: default, info, debug, error or fault.

  9. Question 9 of 11 Disk Utility reports that the disk is about to fail. What does Apple advise?

    Choose one answer.

    Show the answer: Question 9 of 11

    Answer: Back up the data and replace the disk

    diskutil info disk0 shows the drive's own SMART Status, Verified on the lesson's Mac; a warning changes the ticket into a backup and a replacement.

  10. Question 10 of 11 The log points at neither an app nor the disk, and the Apple silicon Mac still restarts at random. What next?

    Choose one answer.

    Show the answer: Question 10 of 11

    Answer: Apple Diagnostics: hold the power button until the startup options appear, then hold Command-D

    The hardware faults lesson covers how to prepare and what to do with the results.

  11. Question 11 of 11 An app is stuck right now and the vendor wants to see what it is doing. Which small report fits?

    Choose one answer.

    Show the answer: Question 11 of 11

    Answer: Sample Process in Activity Monitor, a report on that process over 3 seconds

    A sample fits a problem in progress; a log excerpt fits one with a known time; a sysdiagnose fits a request from Apple or the vendor when nothing narrows the problem.

Interview questions

Warm-up (fresher): why does a Mac with almost no unused memory not prove that it needs more RAM?

Because macOS uses spare memory on purpose. Apple’s Activity Monitor guide says unused memory does not by itself make a Mac faster, and that macOS performs best by using and managing all of its memory, for instance by keeping recently used files cached and by compressing memory that inactive apps hold. The measure that matters is memory pressure, which Apple works out from the unused memory, the swap rate, the wired memory and the file cache, and shows as a graph: green when the RAM is used efficiently, yellow when the Mac might eventually need more, red when it needs more RAM. So I would watch the pressure graph while the user does their normal work, check whether swap keeps growing, and only ask for an upgrade when the pressure stays red.

Two harder calls follow: a Mac that is slow every afternoon and fine in the morning, and a vendor who asks for a sysdiagnose from a finance user’s Mac. Note the single reading you would take first on each, then see whether its page opens the same way:

Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.

  1. Fresher to mid

    A user says their MacBook is fine every morning and slow every afternoon from about 3 o'clock, with no warning messages. How do you find the cause?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  2. Mid to senior

    An accounting app's vendor asks for a sysdiagnose from a finance user's Mac to investigate a crash. What do you do before anything is sent?

    Model answer, Pro. First step and follow-ups

Flashcards · 6 cards

Recall it, then check

Say the answer to yourself before you look: recalling it is what makes it stick.

  1. How do you find the process behind a busy Mac, and how do you stop it?

    Sort the CPU tab of Activity Monitor by % CPU. Try Quit before Force Quit, because Force Quit can lose the files the app has open.

  2. Does a Mac with almost no unused memory need more RAM?

    Not on that alone, because macOS uses spare memory on purpose, for caches and compression. Memory pressure, shown green, yellow or red, says whether it needs more.

  3. How do you narrow the unified log to the messages that matter?

    By time first, with --start and --end or --last, then by a predicate on the process or subsystem, such as process == "Mail".

  4. In what order does First Aid check a Mac's storage, and what happens to a disk said to be failing?

    Each volume, then each container, then the device. A disk that Disk Utility says is about to fail is backed up and replaced, and Apple Diagnostics tests the rest of the hardware.

  5. How do you start Apple Diagnostics?

    From the startup options with Command-D on Apple silicon, or by holding D at start-up on an Intel Mac.

  6. Which report goes with the escalation of a Mac problem?

    The smallest one that answers the question asked: a version, a window of the log or one process. A sysdiagnose, which gathers much of the Mac's state, goes only to someone who asked for it.

Key takeaways

  • Activity Monitor’s CPU tab, sorted by % CPU, names the busy process; Quit comes before Force Quit, because Force Quit can lose open files.
  • Memory pressure, green, yellow or red, says whether a Mac needs RAM; low free memory on its own does not.
  • The unified log is narrowed by time first, with --start and --end or --last, then by a predicate on the process or subsystem.
  • First Aid runs on each volume, then each container, then the device; a disk Disk Utility says is about to fail is backed up and replaced, and Apple Diagnostics tests the rest of the hardware.
  • An escalation carries the smallest report that answers its question, and a sysdiagnose, which gathers a great deal of the Mac’s state, goes only to someone who asked for it.

Terms in this lesson

Apple Diagnostics
Apple's built-in hardware test for a Mac, started from the startup options with Command-D on Apple silicon or by holding D on an Intel Mac, to find which component may be at fault.
Force Quit
Stopping an app or process at once, from Activity Monitor or with Option-Command-Esc, instead of asking it to quit. It can lose the files the app has open, so Quit is tried first.
log predicate
A filter for log show or log stream that compares keys of each message, such as process, subsystem or messageType, with values, as in process == "Mail".
memory pressure
Activity Monitor's measure of how well a Mac's memory meets its needs, worked out from free memory, swap rate, wired memory and file-cached memory, and shown green, yellow or red.
sysdiagnose
A macOS tool, run as root, that gathers a large archive of a Mac's state, logs, crash reports and configuration for Apple or a vendor to investigate a problem.
unified log
The single store of log messages that macOS and its apps write. Console shows it, and log show reads it in Terminal, narrowed by time and by keys such as process or subsystem.

References

Related tools

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.