The "It's Slow" Starting Point: A Resource-First Diagnostic Mindset

System Monitoring & Performance Diagnosis

Chapter 1 · The "It's Slow" Starting Point: A Resource-First Diagnostic Mindset

A ticket comes in: "the app is slow." One engineer restarts the service, waits to see if the complaints stop, and moves on. The other opens a resource monitor first, sees exactly what the system was doing in the moments before the restart would have wiped it away, and only then decides what to do. This course is entirely about becoming the second engineer — not because a restart never helps, but because checking first turns "it's slow" from a vague complaint into a specific, evidence-backed finding.

Four Things "Slow" Could Mean

"Slow" isn't one problem — it's a category covering at least four genuinely different resource bottlenecks, each with its own evidence and its own fix:

ResourceWhat it looks like when it's the bottleneckCovered in
CPUHigh load, processes competing for processor time, everything feels uniformly sluggishChapter 2
MemoryThe system starts swapping to disk, or a process is killed outright for using too muchChapter 3
Disk I/OReads and writes queue up and take far longer than usual, even though CPU and memory look fineChapter 4
NetworkThe local system itself is healthy, but something between it and the user is slow or lossyThis site's own Network Troubleshooting (netdiag1)

Notice the last row doesn't point at a chapter in this course at all — Chapter 6 covers exactly how to recognize that pattern and hand off cleanly, rather than re-teaching a course this site already has.

Scoping the Complaint First

Before touching any specific resource, a handful of questions narrow "it's slow" down dramatically — the same discipline this site's own netdiag1 course applies to connectivity complaints, adapted here for performance:

QuestionWhy it matters
One machine, or many?One machine points at something local to it; many machines at once points at something shared — a network dependency, a database, or a common upstream cause
One resource elevated, or several at once?Several resources moving together is itself a clue — for example, heavy disk I/O can starve the CPU of work to do while it waits, which shows up as elevated CPU "wait" time rather than a genuine CPU bottleneck
Sudden onset, or a gradual drift?A sudden change points toward a specific triggering event — a deployment, a cron job, a traffic spike; a slow drift over days or weeks points toward a genuine capacity or leak problem
Does it line up with a known event?A deployment, a scheduled job, or a marketing campaign happening at the same time is often the actual explanation, hiding in plain sight

Why "Just Restart It" Is a Guess, Not a Diagnosis

A restart is tempting precisely because it often works — many resource problems do clear up, at least temporarily, once a process starts fresh. But "it worked" and "I know why it was happening" are different things entirely, and a restart that isn't preceded by a quick look at what the system was actually doing throws away the one chance to find out.

A restart destroys the exact evidence you need
Once a struggling process restarts, its accumulated memory usage resets, its open file handles close, and its current CPU activity vanishes — the live picture of what was actually going wrong is gone the moment the process exits. This is the same underlying caution as this site's own Logging & Log Analysis course's warning against deleting a log file mid-incident: whatever's about to disappear might be the only copy of the evidence that explains what happened. If the same problem returns tomorrow, you'll be starting from zero again.

A Concrete Example: One Symptom, Several Different Causes

Take "the app is slow" and see how differently it resolves depending on which resource is actually behind it:

  • A runaway process pegging every CPU core: a genuine CPU bottleneck — see Chapter 2
  • The system swapping heavily to disk: a memory shortage severe enough that the OS is paging active memory out — see Chapter 3
  • A nightly backup job saturating the disk: a disk I/O bottleneck that happens to overlap with business hours today — see Chapter 4
  • Everything local looks perfectly healthy: the actual cause is very likely on the network path, not this machine at all — see Chapter 6, which hands off to netdiag1

Four genuinely different root causes, all hiding behind the same two words. Scoping the complaint first, then checking the right resource, is what tells them apart.

A Quick First Look

Before diving deep into any single resource, a quick overall check is worth running first — top on Linux, Task Manager or Resource Monitor on Windows. You'll learn to properly interpret every line of this in Chapters 2 and 3, but even without that depth yet, notice how much is visible in one glance:

$ top top - 14:32:07 up 12 days, 3:41, 2 users, load average: 8.42, 6.15, 3.02 Tasks: 214 total, 3 running, 211 sleeping, 0 stopped, 0 zombie %Cpu(s): 87.3 us, 9.1 sy, 0.0 ni, 2.1 id, 0.0 wa, 0.0 hi, 1.5 si, 0.0 st MiB Mem : 16034.2 total, 412.6 free, 11203.8 used, 4417.8 buff/cache MiB Swap: 2048.0 total, 1890.3 used, 157.7 free

A load average of 8.42, very little "free" memory, and heavy swap usage are all visible in this one snapshot — but they don't carry equal weight, and this chapter deliberately isn't explaining why yet. Chapter 2 covers what actually makes a load average high or normal for a given machine, and Chapter 3 explains why the low "free" figure here is very likely a red herring while the swap usage is a genuine warning sign. This exact snapshot is worth remembering — both of the next two chapters come back to it directly.

A number alone isn't diagnostic without a baseline
Seeing "CPU at 80%" and immediately treating it as the problem skips a real question: is 80% actually unusual for this machine, at this time of day, under its normal workload? A batch-processing server that regularly runs at 80% CPU during its nightly job isn't showing a problem at all — it's showing normal, expected behavior. A number only becomes evidence once it's compared against what's typical for that specific system.

What This Course Covers

Reading CPU load and utilization correctly, understanding what "used" memory actually means, telling a busy disk apart from a genuinely slow one, tracking down where disk space actually went, recognizing when "slow" is really a network problem in disguise, reading a monitoring dashboard's own summarized view, drilling from system-wide symptoms down to the one specific process responsible, and telling a real trend apart from a normal, temporary spike. The capstone applies all of it to three realistic performance tickets.

Hands-On Exercises

Exercise 1

Explain, using this chapter's own reasoning, why restarting a slow service before checking any resource metrics can make a recurring problem harder to solve rather than easier.

📄 View solution
Exercise 2

A ticket says "the server is slow." List this chapter's four scoping questions, and explain what a specific answer to each one would point toward.

📄 View solution
Exercise 3

Explain why this chapter says "CPU at 80%" isn't automatically evidence of a problem, using the batch-processing server example, and what would actually be needed to know whether it's a real issue.

📄 View solution

Chapter 1 Quick Reference

  • "Slow" covers (at least) four different bottlenecks: CPU, memory, disk I/O, and network — each with its own evidence and fix
  • Scope first: one machine or many? one resource or several? sudden or gradual? tied to a known event?
  • A restart may relieve the symptom, but it also destroys the evidence needed to know why it happened — echoing this site's own "never delete logs mid-incident" caution
  • The same complaint can hide genuinely different causes — a runaway process, memory exhaustion, a disk-saturating job, or a problem that isn't local at all
  • A resource number alone isn't diagnostic — it needs a baseline for what's normal on that specific system
  • Next chapter: CPU: Reading Load, Utilization & Run Queues