# Ignition Server at 100% CPU — Plant Stopped

**URL:** <https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [October 27, 2025, 5:44pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741 "2025-10-27T17:44:40Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![TechEnlive](https://avatars.discourse-cdn.com/v4/letter/t/3be4f8/32.png) [@TechEnlive](https://forum.inductiveautomation.com/u/TechEnlive)\
**Post date:** [October 27, 2025, 5:44pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/1 "2025-10-27T17:44:40Z")

</div>

Hi Team,

We are suddenly facing an issue where the Ignition server is using 100% CPU.

The server log shows the following message:

> _“Clock drift, degraded performance, or pause-the-world detected. Max allowed deviation = 1000ms.”_

Has anyone encountered this issue before or have an idea how to resolve it? The entire plant operation is currently stopped.

Thanks in advance for your help.

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [October 27, 2025, 5:47pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/2 "2025-10-27T17:47:02Z")

</div>

I would contact official IA support.

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [October 27, 2025, 5:53pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/3 "2025-10-27T17:53:49Z")

</div>

I had that issue last week, and by going to Status \> Running Scripts I could see that there was some script somewhere that was running for seconds and minutes, and just kept piling up instances of it. Since it wasn’t a scheduled task I couldn’t tell where it was running from. I was able to kill the scripts, but not keep them from continuing to pile up until I restarted the server.

_Something_ I had done recently during development caused an endless loop or something, but I never did figure out what, since the problem went away after the restart.

---

<div class="post-metadata">

**Author:** ![dillon](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dillon/32/81537_2.png) [@dillon](https://forum.inductiveautomation.com/u/dillon)\
**Post date:** [October 27, 2025, 5:56pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/4 "2025-10-27T17:56:49Z")

</div>

The message is the result of your server issues. as @Ryan_Deardorff said, start checking active scripts, and other things going on in your Gateway like Database connections, threads, etc. Does the wrapper log have any more information to help you?

> [@dkhayes117](#):
>
> I would contact official IA support.

This if you need immediate support. Support isn't guaranteed here since it's a community forum. I wish you luck!!

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 27, 2025, 7:03pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/5 "2025-10-27T19:03:03Z")

</div>

> [@Ryan\_Deardorff](#):
>
> _Something_ I had done recently during development

Script instances piling up is usually some kind of abuse of `system.util.invokeAsynchronous()`, particularly if CPU goes to 100%.

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [October 27, 2025, 7:04pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/6 "2025-10-27T19:04:56Z")

</div>

I never use that. I do use Timers, though.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 27, 2025, 7:05pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/7 "2025-10-27T19:05:31Z")

</div>

Eeewwww! (jython stdlib)

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [October 27, 2025, 7:09pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/8 "2025-10-27T19:09:51Z")

</div>

Can you elaborate? I only user Timers in the view, when I can’t figure a better way to get something like `.focus()` to happen at the right time. Not ideal, I know, but better than `sleep()`.

> **[Perspective view onLoad event that fires when the view is done loading |...](https://ideas.inductiveautomation.com/ignition-features-and-ideas/p/perspective-view-onload-event-that-fires-when-the-view-is-done-loading)**
>
> This would be the only clean way of ensuring that, for example, an input .focus() would execute at the right time... https://forum.inductiveautomation.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 27, 2025, 7:17pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/9 "2025-10-27T19:17:45Z")

</div>

> [@Ryan\_Deardorff](#):
>
> Not ideal, I know, but better than `sleep()`.

Actually, no, I would say a short sleep is better than a jython Timer. Perspective will create and clean up threads around sleeps without jython's _dangerous_ threading getting involved. (Can leak interpreters, possibly worse.)

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [October 27, 2025, 7:25pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/10 "2025-10-27T19:25:35Z")

</div>

Good to know, but I thought that since `sleep()` blocks its thread from completion, it was the worse choice. I don’t use them a lot, and only as a last resort, but I haven’t had issues with Timers, that I knew of anyway–it’s entirely possible that what I encountered last week was caused by one.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 27, 2025, 7:41pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/11 "2025-10-27T19:41:15Z")

</div>

Sleep is a horror for Vision, because Swing requires all GUI activity to happen on the foreground thread. Perspective doesn't have that problem, and will dynamically add threads to continue forward progress. So a short sleep in a Perspective event isn't that ugly. (Short = ~1s or less.)

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [October 27, 2025, 7:53pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/12 "2025-10-27T19:53:12Z")

</div>

For posterity, because I just looked it up:  
Jython's `time.sleep` is exactly equivalent to `java.lang.Thread.sleep()`, in that it's literally a native Java method that dispatches to `Thread.sleep` internally:

(I was curious whether using `time.sleep` might cause issues down the road when we migrate to a version of Java with virtual threads and possibly change Perspective's default dispatch facility to use virtual threads)

```java
    public static void sleep(double secs) {
        if (secs == (double)0.0F) {
            Thread.yield();
        } else {
            try {
                Thread.sleep((long)(secs * (double)1000.0F));
            } catch (InterruptedException var3) {
                throw new PyException(Py.KeyboardInterrupt, "interrupted sleep");
            }
        }
    }

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 27, 2025, 8:22pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/13 "2025-10-27T20:22:53Z")

</div>

It's the `Timer` class's thread creation that I'd worry about.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [October 27, 2025, 10:05pm UTC](https://forum.inductiveautomation.com/t/ignition-server-at-100-cpu-plant-stopped/111741/14 "2025-10-27T22:05:44Z")

</div>

Jython's `Timer` extends Jython's `Thread` which extends `java.lang.Thread`, so it's at least not doing anything hideously terrible.  
The wait is ultimately done by a Jython `_Event` that's backed by a `org.python.modules._threading.Condition` instance which internally contains `java.concurrent` lock/condition objects. I still wouldn't recommend using it, but mostly from the "leaking interpreters when you pass anonymous closures in" angle, less from a concurrency safety standpoint. 🤷
