This is a screenshot of htop, an interactive process viewer and system monitor for Linux. It perfectly confirms our theory from the Grafana dashboard: your server’s CPU is maxed out, and we now know exactly what application is causing it.

Here is the breakdown of what this screen is telling you:
Top Section: System Resource Usage
- CPUs (0, 1, 2, 3): These represent your 4 CPU cores. All of them are heavily saturated, running between 87.4% and 96.0%. The red bars at the very end of the green rows represent kernel/system processing overhead, but the overwhelming green color means the CPU is busy handling user-space tasks.
- Load Average (
4.15 2.03 1.34): This tracks the average system load over the last 1, 5, and 15 minutes. Because you have 4 cores, a load of 4.0 means your CPU is at 100% capacity. The 1-minute average is 4.15, meaning the CPU queue is fully saturated and slightly overflowing right now. However, looking at the 15-minute average (1.34), we can see this heavy load spike is relatively recent. - Mem (
3.71G/23.5G): Just like Grafana showed, RAM usage is perfectly fine—only about 3.71 GB out of 23.5 GB is being used. - Swp (
0K/8.00G): Swap memory is completely untouched (0K), meaning there’s zero memory pressure.
Bottom Section: The Culprit Processes
The table lists the active processes sorted by CPU consumption.
- The Culprit: Celery (
celeryd)Almost all the top CPU-consuming processes are Celery ForkPoolWorkers (e.g., PID 4191, 4193, 4194, 3260, etc.). Celery is an asynchronous task/job queue system commonly used in Python applications. - What App is this? Further down the list, you can see
postgres: authentikandgunicorn: worker [authentik.root.asgi:application]. This means the server is running Authentik—an open-source identity provider/authentication platform. - What are they doing? Each of these Celery workers is actively chewing through roughly 45% to 65% of an individual CPU core (indicated under the
CPU%column). Under theS(State) column, they are marked asR(Running), meaning they are actively crunching data, not waiting or sleeping (S).
Summary & What to do Next
Your Authentik deployment is currently running heavy background tasks via Celery, which is maxing out all 4 of your CPU cores. This lines up with the network traffic spike we saw earlier—Authentik is likely processing a massive batch of user syncs, LDAP/Active Directory synchronizations, or a sudden flood of login/outbound API requests.

This is the output of the docker stats command, which provides a live data stream for your running Docker containers.
It acts as the final piece of the puzzle. We started with Grafana showing high CPU and network traffic, moved to htop showing Celery workers burning CPU, and now we can see exactly which containers are responsible and how much data they are churning through.
The Primary Culprits: Authentik Workers
Look closely at these three containers:
authentik-worker-1(ID:b82523a11915): 118.72% CPUauthentik-worker2-1(ID:00d42ac8a162): 115.24% CPUauthentik-worker3-1(ID:03aecaf9ef51): 101.79% CPU
💡 Note on CPU %: In Docker,
100%means one full CPU core is completely saturated. Because your server has 4 cores, the maximum total CPU available is 400%. These three workers combined are consuming roughly 335% out of 400%, leaving almost nothing for the rest of the system.
The Smoking Gun: Massive Network I/O
If you look at the NET I/O column for these three workers, they have processed an astronomical amount of network data:
- They have received (~2.8 TB each) and transmitted (~90 GB to 117 GB each) of data over their lifespans.
- By comparison, your main web server application container (
authentik-server-1) has only handled around 1.54 GB. This proves that the workers are doing some massive, continuous background data processing.
Supporting Evidence: The Database
authentik-postgresql-1: Running at 41.61% CPU.This is moderately high for a database and means it is working hard to keep up with the constant read/write queries being thrown at it by those three overloaded Celery workers.dokploy-...containers: Dokploy (your deployment/panel manager) and its internal database/redis/traefik containers are completely idling (0% to 0.25% CPU), meaning this issue is strictly isolated to the Authentik stack.
What is causing this in Authentik?
Given that the workers have pulled terabytes of data, this isn’t a normal login event. This behavior is classic for one of two scenarios in Authentik:
- LDAP / Active Directory Sync Loop: If you have an LDAP or Active Directory provider configured, it might be caught in an aggressive sync loop, constantly downloading your entire directory over and over again.
- Outbound Sync / User Provisioning: A configured connection to an external application (like SCIM syncing to Slack, Google Workspace, or Microsoft 365) might be failing and continuously retrying a massive user sync.
How to Fix It Right Now
- Restart the Workers to clear the immediate load:Run this command on your server to give the CPU some breathing room:Bash
docker restart authentik-worker-1 authentik-worker2-1 authentik-worker3-1 - Check the logs immediately after restarting:See what task they pick back up. Run:Bash
docker logs --tail 100 -f authentik-worker-1 - Log into the Authentik UI:Go to Directory -> Providers or System -> Background Tasks and check for any LDAP or Sync tasks that are currently running, stuck, or failing frequently. If you find one, increase its sync interval (e.g., change it from every few minutes to once an hour or once a day).
- Look for any active sync tasks (like an LDAP/Active Directory provider sync) or heavy background jobs that kicked off recently and see if they can be optimized, throttled, or rescheduled for off-peak hours.