When a customer reports that their website is slow, follow these steps in order.
NOTE: you need root-level access on the server.
create a backup of the configuration file before making any changes to it.
Step 1: Check Server Load
Run:
docker stats
Look at the CPU% for the caddy container.
If Caddy CPU is over 100%, the server is receiving a large amount of incoming traffic.
This is usually caused by:
Traffic spike
DoS/DDoS attack
Excessive bot traffic
To identify which domain is responsible, check its access log:
tail -f /var/log/caddy/domlogs/<DOMAIN>/access.log
If needed, increase Caddy limits in:
/root/.env
Then recreate the Caddy container (compose down/up).
Step 2: Check the User's Containers
Run:
docker --context=<USERNAME> stats
Look for:
- High CPU PHP-FPM
- Database overload
- Web server overload (Apache / Nginx / OpenLiteSpeed / OpenResty)
- Memory spikes or constant max usage
Step 3: Check System Notifications (IMPORTANT)
Always check system notifications for known issues or automatic system actions.
tail -f /var/log/openpanel/admin/notifications.log
This log may show:
- High CPU warnings
- High SWAP usage alerts
- Automatic SWAP cleanup
- OpenPanel updates
- System-level service changes (enabled/disabled OpenAdmin)
- Sentinel actions or protections
Example entries:
High SWAP usage! SWAP: 88%. Cleanup starting.
SWAP cleared — now 0%
OpenPanel updated successfully!
High CPU Usage! CPU: 91%
If there are alerts here, they often explain the root cause of performance issues.
Step 4: Identify the Web Server
Check which web server the user is running:
grep WEB_SERVER /home/<USERNAME>/.env
Example:
WEB_SERVER="apache"
Then edit the correct configuration file:
| Web Server | Config File |
| ------------- | -------------------- |
| Apache | httpd.conf |
| Nginx | nginx.conf |
| OpenLiteSpeed | openlitespeed.conf |
| OpenResty | openresty.conf |
All files are in:
/home/<USERNAME>/
Step 5: Check PHP Version for Domain
Run:
opencli php-domain <DOMAIN>
Example:
Domain 'example.com' uses PHP version: 8.5
Then edit:
/home/<USERNAME>/php.ini/
Make sure you edit the correct PHP version directory.
Step 6: Check Logs
Check service logs after identifying the issue:
docker logs <container>
or:
docker --context=<USERNAME> logs <service>
Look for:
- PHP errors
- Database errors
- Memory exhaustion
- Restart loops
- Timeout errors
Step 7: Restart Services
Go to the user directory first:
cd /home/<USERNAME>
Then restart services:
PHP-FPM
docker --context=<USERNAME> compose down php-fpm-<PHP_VERSION>
docker --context=<USERNAME> compose up -d php-fpm-<PHP_VERSION>
Apache
docker --context=<USERNAME> restart apache
Other web servers
docker --context=<USERNAME> restart nginx
docker --context=<USERNAME> restart openlitespeed
docker --context=<USERNAME> restart openresty
User Configuration Files
Located in:
/home/<USERNAME>/
Common files:
| File | Service |
| -------------------- | ------------- |
| custom.cnf | MySQL |
| my.cnf | MariaDB/MySQL |
| httpd.conf | Apache |
| nginx.conf | Nginx |
| openlitespeed.conf | OpenLiteSpeed |
| openresty.conf | OpenResty |
| crons.ini | Cron |
| default.vcl | Varnish |
| php.ini/ | PHP |
Recommended Workflow
- Run
docker stats
- Check if Caddy is overloaded
- Check domain access logs
- Adjust Caddy limits if needed
- Run
docker --context=<USERNAME> stats
- Check system notifications log
- Identify web server
- Check PHP version per domain
- Review service logs
- Restart affected services
- Verify system stabilizes
This order ensures you first detect traffic issues, then system-level alerts, then service-level problems, before making configuration changes.