High CPU Usage:Platform-Executor

What is platform-executor ? Just this thread takes 24% of CPU in the server. Frequently Ignition reaches beyond 50% CPU and tend restart the Ignition service automatically. How to optimize this for the better performance.

Thread [platform-executor-1] id=65, (TIMED_WAITING for java.util.concurrent.SynchronousQueue$TransferStack@2f64b1d4)
java.base@11.0.6/jdk.internal.misc.Unsafe.park(Native Method)
java.base@11.0.6/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
java.base@11.0.6/java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source)
java.base@11.0.6/java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source)
java.base@11.0.6/java.util.concurrent.SynchronousQueue.poll(Unknown Source)
java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base@11.0.6/java.lang.Thread.run(Unknown Source)

You’ll have to share more information about what you have configured. Ignition uses multiple different thread pools and I don’t recall what tasks run in that one (and they are undocumented implementation details that can change from version to version).

Consider adding some logging to scripts that capture the thread name (via java.lang.Thread.currentThread) running that script. That’ll help you identify where to look closer.

1 Like

Thanks Trumel for your feedbacks, Sure I’ll follow your suggestions respond back. if I understood well, the platform-executor thread belongs to scripting(Gateway/Project). So it should not be of any other Ignition resources. I am making it clear because Our gateway has 18 projects, it will be challenging then.

Hello, I’m experiencing the same thing here. Any suggestions or narrowing down the search ?
Should I look for Scripts + Gateway timers + runScripts ?

Thread [platform-executor-1049] id=278869, (TIMED_WAITING for java.util.concurrent.SynchronousQueue$TransferStack@7717e714)
  java.base@11.0.6/jdk.internal.misc.Unsafe.park(Native Method)
  java.base@11.0.6/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
  java.base@11.0.6/java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source)
  java.base@11.0.6/java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source)
  java.base@11.0.6/java.util.concurrent.SynchronousQueue.poll(Unknown Source)
  java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
  java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  java.base@11.0.6/java.lang.Thread.run(Unknown Source)

Any help is appreciated.

Thanks,
Kaushik