We’re on 8.1.14, and system.util.threadDump()
did return a pretty nicely formatted json.
Here is a condensed version with the threads that are identified in the long running scripts:
{
"name": "perspective-worker-735",
"id": 5807,
"state": "RUNNABLE",
"daemon": true,
"system": "perspective",
"scope": "Gateway",
"cpuUsage": 4.4924031589958595,
"lockedSynchronizers": [
"java.util.concurrent.ThreadPoolExecutor$Worker@664d3bf9"
],
"stacktrace": [
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.find(LinkedTreeMap.java:150)",
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.put(LinkedTreeMap.java:94)",
"app//com.inductiveautomation.ignition.common.gson.JsonObject.add(JsonObject.java:64)",
"app//com.inductiveautomation.ignition.common.script.adapters.PyJsonObjectAdapter.__setitem__(PyJsonObjectAdapter.java:135)",
"org.python.pycode._pyx1400.transform$1(\u003ctransform\u003e:16)",
"org.python.pycode._pyx1400.call_function(\u003ctransform\u003e)",
"app//org.python.core.PyTableCode.call(PyTableCode.java:173)",
"app//org.python.core.PyBaseCode.call(PyBaseCode.java:306)",
"app//org.python.core.PyFunction.function___call__(PyFunction.java:474)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:469)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:464)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:831)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:813)",
"app//com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:806)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.runFunction(ScriptTransform.java:113)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.synchronousTransformInternal(ScriptTransform.java:142)",
"com.inductiveautomation.perspective.gateway.binding.transforms.AbstractSynchronousTransform.transform(AbstractSynchronousTransform.java:30)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.transform(AbstractBindingHarness.java:259)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.run(AbstractBindingHarness.java:272)",
"java.base@11.0.13/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.FutureTask.run(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:42)",
"java.base@11.0.13/java.lang.Thread.run(Unknown Source)"
]
},
{
"name": "perspective-worker-750",
"id": 5982,
"state": "RUNNABLE",
"daemon": true,
"system": "perspective",
"scope": "Gateway",
"cpuUsage": 6.2657201954415935,
"lockedSynchronizers": [
"java.util.concurrent.ThreadPoolExecutor$Worker@33347937"
],
"stacktrace": [
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.find(LinkedTreeMap.java:150)",
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.put(LinkedTreeMap.java:94)",
"app//com.inductiveautomation.ignition.common.gson.JsonObject.add(JsonObject.java:64)",
"app//com.inductiveautomation.ignition.common.script.adapters.PyJsonObjectAdapter.__setitem__(PyJsonObjectAdapter.java:135)",
"org.python.pycode._pyx1400.transform$1(\u003ctransform\u003e:16)",
"org.python.pycode._pyx1400.call_function(\u003ctransform\u003e)",
"app//org.python.core.PyTableCode.call(PyTableCode.java:173)",
"app//org.python.core.PyBaseCode.call(PyBaseCode.java:306)",
"app//org.python.core.PyFunction.function___call__(PyFunction.java:474)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:469)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:464)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:831)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:813)",
"app//com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:806)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.runFunction(ScriptTransform.java:113)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.synchronousTransformInternal(ScriptTransform.java:142)",
"com.inductiveautomation.perspective.gateway.binding.transforms.AbstractSynchronousTransform.transform(AbstractSynchronousTransform.java:30)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.transform(AbstractBindingHarness.java:259)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.run(AbstractBindingHarness.java:272)",
"java.base@11.0.13/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.FutureTask.run(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:42)",
"java.base@11.0.13/java.lang.Thread.run(Unknown Source)"
]
},
{
"name": "perspective-worker-5259",
"id": 41148,
"state": "RUNNABLE",
"daemon": true,
"system": "perspective",
"scope": "Gateway",
"cpuUsage": 4.019518615943663,
"lockedSynchronizers": [
"java.util.concurrent.ThreadPoolExecutor$Worker@cf83248"
],
"stacktrace": [
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.find(LinkedTreeMap.java:150)",
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.put(LinkedTreeMap.java:94)",
"app//com.inductiveautomation.ignition.common.gson.JsonObject.add(JsonObject.java:64)",
"app//com.inductiveautomation.ignition.common.script.adapters.PyJsonObjectAdapter.__setitem__(PyJsonObjectAdapter.java:135)",
"org.python.pycode._pyx8985.transform$1(\u003ctransform\u003e:16)",
"org.python.pycode._pyx8985.call_function(\u003ctransform\u003e)",
"app//org.python.core.PyTableCode.call(PyTableCode.java:173)",
"app//org.python.core.PyBaseCode.call(PyBaseCode.java:306)",
"app//org.python.core.PyFunction.function___call__(PyFunction.java:474)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:469)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:464)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:831)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:813)",
"app//com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:806)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.runFunction(ScriptTransform.java:113)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.synchronousTransformInternal(ScriptTransform.java:142)",
"com.inductiveautomation.perspective.gateway.binding.transforms.AbstractSynchronousTransform.transform(AbstractSynchronousTransform.java:30)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.transform(AbstractBindingHarness.java:259)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.run(AbstractBindingHarness.java:272)",
"java.base@11.0.13/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.FutureTask.run(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:42)",
"java.base@11.0.13/java.lang.Thread.run(Unknown Source)"
]
},
{
"name": "perspective-worker-5273",
"id": 41388,
"state": "RUNNABLE",
"daemon": true,
"system": "perspective",
"scope": "Gateway",
"cpuUsage": 5.319951109337202,
"lockedSynchronizers": [
"java.util.concurrent.ThreadPoolExecutor$Worker@37433ac"
],
"stacktrace": [
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.find(LinkedTreeMap.java:150)",
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.put(LinkedTreeMap.java:94)",
"app//com.inductiveautomation.ignition.common.gson.JsonObject.add(JsonObject.java:64)",
"app//com.inductiveautomation.ignition.common.script.adapters.PyJsonObjectAdapter.__setitem__(PyJsonObjectAdapter.java:135)",
"org.python.pycode._pyx8985.transform$1(\u003ctransform\u003e:16)",
"org.python.pycode._pyx8985.call_function(\u003ctransform\u003e)",
"app//org.python.core.PyTableCode.call(PyTableCode.java:173)",
"app//org.python.core.PyBaseCode.call(PyBaseCode.java:306)",
"app//org.python.core.PyFunction.function___call__(PyFunction.java:474)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:469)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:464)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:831)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:813)",
"app//com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:806)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.runFunction(ScriptTransform.java:113)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.synchronousTransformInternal(ScriptTransform.java:142)",
"com.inductiveautomation.perspective.gateway.binding.transforms.AbstractSynchronousTransform.transform(AbstractSynchronousTransform.java:30)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.transform(AbstractBindingHarness.java:259)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.run(AbstractBindingHarness.java:272)",
"java.base@11.0.13/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.FutureTask.run(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:42)",
"java.base@11.0.13/java.lang.Thread.run(Unknown Source)"
]
},
{
"name": "perspective-worker-10048",
"id": 57827,
"state": "RUNNABLE",
"daemon": true,
"system": "perspective",
"scope": "Gateway",
"cpuUsage": 4.965287702048054,
"lockedSynchronizers": [
"java.util.concurrent.ThreadPoolExecutor$Worker@60a98039"
],
"stacktrace": [
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.rebalance(LinkedTreeMap.java:311)",
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.find(LinkedTreeMap.java:175)",
"app//com.inductiveautomation.ignition.common.gson.internal.LinkedTreeMap.put(LinkedTreeMap.java:94)",
"app//com.inductiveautomation.ignition.common.gson.JsonObject.add(JsonObject.java:64)",
"app//com.inductiveautomation.ignition.common.script.adapters.PyJsonObjectAdapter.__setitem__(PyJsonObjectAdapter.java:135)",
"org.python.pycode._pyx14217.transform$1(\u003ctransform\u003e:16)",
"org.python.pycode._pyx14217.call_function(\u003ctransform\u003e)",
"app//org.python.core.PyTableCode.call(PyTableCode.java:173)",
"app//org.python.core.PyBaseCode.call(PyBaseCode.java:306)",
"app//org.python.core.PyFunction.function___call__(PyFunction.java:474)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:469)",
"app//org.python.core.PyFunction.__call__(PyFunction.java:464)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:831)",
"app//com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:813)",
"app//com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:806)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.runFunction(ScriptTransform.java:113)",
"com.inductiveautomation.perspective.gateway.binding.transforms.script.ScriptTransform.synchronousTransformInternal(ScriptTransform.java:142)",
"com.inductiveautomation.perspective.gateway.binding.transforms.AbstractSynchronousTransform.transform(AbstractSynchronousTransform.java:30)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.transform(AbstractBindingHarness.java:259)",
"com.inductiveautomation.perspective.gateway.model.AbstractBindingHarness$TransformSequencer.run(AbstractBindingHarness.java:272)",
"java.base@11.0.13/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.FutureTask.run(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
"java.base@11.0.13/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
"com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:42)",
"java.base@11.0.13/java.lang.Thread.run(Unknown Source)"
]
}
I see the word “transform” in the stack trace of every thread here, so I’m suspecting these are coming from script transforms, which is very widely used in our organization.
Is there a way to see which script transforms are causing this? Any information would be helpful at this point.
Thank you all in advance!