Intermittent outages — a site that works fine most of the time but occasionally fails — are notoriously harder to diagnose than consistent failures. This guide covers a systematic approach.
Why Intermittent Issues Are Harder
By the time you notice and start investigating, the symptom may have already resolved itself — you need to either catch it happening live, or have sufficient historical data/logging to reconstruct what happened after the fact.
Step 1 — Set Up Continuous External Monitoring First
See How to Set Up Uptime Monitoring for Your Website and How to Install Uptime Kuma (Self-Hosted Uptime Monitoring) — before you can effectively diagnose an intermittent issue, you need to actually detect and timestamp when it's happening; monitoring is the essential first step.
Step 2 — Look for Patterns in Timing
Once you have some monitoring history, look for patterns: does it happen at specific times of day (traffic peaks, scheduled jobs)? On specific days? Correlating timing with other known events narrows the investigation significantly.
Step 3 — Correlate with Resource Usage
See How to Set Up Prometheus and Grafana for VPS Monitoring — check whether outage timing correlates with CPU/memory/disk spikes, suggesting a resource exhaustion cause rather than a purely network or application-logic issue.
Step 4 — Check for Scheduled Tasks Running at the Same Time
crontab -l
cat /etc/cron.d/*
A resource-intensive backup, report generation, or other scheduled job running at the same time as observed outages is a common, easily-overlooked correlation.
Step 5 — Check Web Server and Application Logs for the Specific Time Window
grep "26/Aug/2026:14:3" /var/log/nginx/access.log
Once you have a specific timestamp from your monitoring alert, search logs specifically around that window for errors, unusual request patterns, or anything else anomalous.
Step 6 — Check for Memory Leaks Causing Periodic OOM Kills
dmesg | grep -i "killed process"
A gradual memory leak causing periodic OOM kills and restarts can present as intermittent outages — see How to Diagnose and Fix Out of Memory (OOM) Errors.
Step 7 — Check for Database Connection Pool Exhaustion
Intermittent failures under specific load conditions sometimes indicate a database connection pool being exhausted temporarily — see How to Set Up Database Connection Pooling (PgBouncer, ProxySQL) for both diagnosis and mitigation.
Step 8 — Check for External Dependency Issues
If your application depends on external APIs/services, intermittent failures in those dependencies can manifest as your own site appearing intermittently down — review error logs specifically for timeouts or errors related to external calls.
Step 9 — Set Up More Granular Logging During Active Investigation
If standard logs aren't revealing the cause, temporarily increase logging verbosity for the suspected component, aiming to capture more detail the next time the issue recurs.
Step 10 — Use Distributed Tracing If the Architecture Is Complex
See How to Implement Distributed Tracing with Jaeger — particularly valuable for intermittent issues in multi-service architectures, since it can reveal exactly which specific service/call chain is involved when the issue does occur.
Building a Timeline as Evidence Accumulates
Document each occurrence (time, any correlating factors, what logs showed) — intermittent issues often only become clear after accumulating several data points revealing a pattern not obvious from any single occurrence alone.
Continue Reading
- How to Set Up Uptime Monitoring for Your Website
- How to Diagnose and Fix Out of Memory (OOM) Errors
- How to Correlate Logs, Metrics, and Traces During an Incident
Browse more articles in Troubleshooting & FAQ.