A Practical Moodle Troubleshooting Workflow
A practical workflow for isolating and fixing Moodle issues across application code, cron, plugins, caching, web server configuration, and infrastructure.
Summary: This guide lays out a practical Moodle troubleshooting workflow, including symptom capture, log inspection, X-Sendfile validation, PHP-FPM sizing, timeout analysis, and common hidden configuration issues.
This is the structured response for “the site is broken or slow” when you need to move from symptoms to a real root cause instead of changing random settings.
Step 1: Write down the symptom precisely
Do not begin with theory. Begin with a reproducible statement:
- course creation takes 40 seconds
- large downloads fail
- grading triggers a timeout
- welcome emails show the wrong sender name
This matters because different symptom classes point to different layers immediately.
Step 2: Confirm access to the right systems
You should have access to:
- Moodle admin
- the web server
- PHP-FPM configuration and status pages if available
- database access or monitoring
- logs for the relevant time window
If you cannot inspect all those layers, troubleshooting becomes speculation very quickly.
Step 3: Check recent changes first
Before tuning anything, ask what changed recently:
- plugin deployment
- upgrade
- PHP version change
- database import
- web server config edit
- traffic spike
The most efficient fixes often come from correlating the failure to a recent change rather than from deep system analysis.
Step 4: Validate large-file delivery separately
If the problem involves large files, check file delivery as its own subsystem. The SOP explicitly covers Apache mod_xsendfile as a common performance and reliability fix.
The sequence is:
- confirm
mod_xsendfileis installed - add the required Apache directives to the vhost
- enable the corresponding Moodle setting
- test both a direct Apache file and a Moodle-served file
This is one of the fastest ways to resolve “large downloads are slow or broken” without rewriting application code.
Step 5: Check PHP-FPM sizing before blaming Moodle
Many “Moodle is slow” complaints are really PHP-FPM pool exhaustion. Look for:
- max children warnings
- request queueing
- under-sized pools relative to available RAM
- multiple sites sharing the same pool or server resources poorly
The SOP specifically calls out checking the pool configuration and status pages rather than guessing at values.
Step 6: Separate timeout types by layer
Timeouts do not all mean the same thing. Distinguish between:
- Apache or FastCGI read timeouts
- Varnish or proxy timeouts
- MySQL connection timeout or dropped connection
- application-side slowness due to expensive queries or blocked PHP workers
Increasing every timeout value without identifying the failing layer usually just hides the real problem.
Step 7: Look for configuration mistakes that are easy to miss
The SOP includes several issues that are easy to overlook because they are small:
- spaces or stray output in PHP files
- wrong sender-name configuration for welcome emails
- CLI PHP version not matching the web PHP version
- environment-specific performance regressions such as the ICM course-creation case study
These often explain “we only changed something small” incidents.
Step 8: Close the loop after the fix
When the issue is resolved, document:
- what failed
- why it failed
- what fixed it
- what should be monitored or changed to prevent recurrence
If you skip this, you will eventually rediscover the same incident under a different name.
Solin specializes in Moodle troubleshooting, performance analysis, and production incident recovery. Need help? Contact us.
Solin helps teams diagnose and resolve Moodle incidents, regressions, and hard-to-reproduce production problems. Need help? Contact us.
Contact us