Designer and client freeze when opening particular popup

We’re still working on our upgrade from Ignition 7.9 to 8.0.

But there’s one particular popup that causes the client to freeze when opened. It causes a high CPU usage, and even the error popup and diagnostics freeze.

When opening it in the designer, the designer also freezes.

It’s a very simple popup. 3 buttons (one to open a different popup, one to write a tag, and one to close the popup), 6 numeric text fields linked to tags, and one dropdown where the dataset and selected value are linked to tags.

I don’t get how there can be anything wrong with it, and I don’t know how to investigate this issue.

A thread dump would be the way to diagnose. You’ll need to have a JDK installed, somewhere on your machine, so you can use the jstack executable.

Thank you for the hint.

I let it run two times (2 minutes apart), so I could easily compare what was staying the same or what was taking more time.

This thread was the one taking the most CPU time (7 CPU seconds in 2 minutes). With very different stack traces.

Apart from that, most differences I see come from threads going from “Timed waiting” state to “Runnable”. Which should at least mean they don’t use up too much CPU time.

The complete traces are included as attachement.

"AWT-EventQueue-0" #20 prio=6 os_prio=0 cpu=41375.00ms elapsed=437.98s tid=0x000001bcd7e05800 nid=0x62c runnable  [0x000000adf4efc000]
   java.lang.Thread.State: RUNNABLE
        at java.security.AccessController.getStackAccessControlContext(java.base@11.0.6/Native Method)
        at java.security.AccessController.getContext(java.base@11.0.6/Unknown Source)
        at java.awt.AWTEvent.<init>(java.desktop@11.0.6/Unknown Source)
        at java.awt.event.InvocationEvent.<init>(java.desktop@11.0.6/Unknown Source)
        at java.awt.event.InvocationEvent.<init>(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue.invokeLater(java.desktop@11.0.6/Unknown Source)
        at com.inductiveautomation.ignition.client.util.EDTUtil.coalescingInvokeLater(EDTUtil.java:170)
        - locked <0x00000000d63988e0> (a java.lang.Object)
        at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.childInteractionUpdated(ExpressionPropertyAdapter.java:52)
        at com.inductiveautomation.factorypmi.application.binding.PropertyListenerDescriptor.propertyChange(PropertyListenerDescriptor.java:74)
        at java.beans.PropertyChangeSupport.fire(java.desktop@11.0.6/Unknown Source)
        at java.beans.PropertyChangeSupport.firePropertyChange(java.desktop@11.0.6/Unknown Source)
        at java.beans.PropertyChangeSupport.firePropertyChange(java.desktop@11.0.6/Unknown Source)
        at java.awt.Component.firePropertyChange(java.desktop@11.0.6/Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor44.invoke(java.base@11.0.6/Unknown Source)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.6/Unknown Source)
        at java.lang.reflect.Method.invoke(java.base@11.0.6/Unknown Source)
        at com.inductiveautomation.factorypmi.application.binding.util.DynamicPropertyUtil.firePropertyChange(DynamicPropertyUtil.java:291)
        at com.inductiveautomation.factorypmi.application.binding.util.DynamicPropertyUtil.setPropertyValue(DynamicPropertyUtil.java:282)
        at com.inductiveautomation.vision.api.client.components.model.AbstractVisionPanel.setPropertyValue(AbstractVisionPanel.java:165)
        at com.inductiveautomation.factorypmi.application.binding.AbstractPropertyAdapter.updateTarget(AbstractPropertyAdapter.java:302)
        at com.inductiveautomation.factorypmi.application.binding.AbstractPropertyAdapter.updateValue(AbstractPropertyAdapter.java:266)
        at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.runExpression(ExpressionPropertyAdapter.java:89)
        at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter$1.run(ExpressionPropertyAdapter.java:59)
        at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:127)
        at java.awt.event.InvocationEvent.dispatch(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue$4.run(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue$4.run(java.desktop@11.0.6/Unknown Source)
        at java.security.AccessController.doPrivileged(java.base@11.0.6/Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@11.0.6/Unknown Source)
        at java.awt.EventQueue.dispatchEvent(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.run(java.desktop@11.0.6/Unknown Source)

   Locked ownable synchronizers:
        - None
"AWT-EventQueue-0" #20 prio=6 os_prio=0 cpu=48765.63ms elapsed=556.67s tid=0x000001bcd7e05800 nid=0x62c runnable  [0x000000adf4efc000]
   java.lang.Thread.State: RUNNABLE
        at jdk.internal.misc.Unsafe.unpark(java.base@11.0.6/Native Method)
        at java.util.concurrent.locks.LockSupport.unpark(java.base@11.0.6/Unknown Source)
        at java.util.concurrent.ForkJoinPool.signalWork(java.base@11.0.6/Unknown Source)
        at java.util.concurrent.ForkJoinPool.externalPush(java.base@11.0.6/Unknown Source)
        at java.util.concurrent.ForkJoinPool.externalSubmit(java.base@11.0.6/Unknown Source)
        at java.util.concurrent.ForkJoinPool.execute(java.base@11.0.6/Unknown Source)
        at java.util.concurrent.CompletableFuture.asyncSupplyStage(java.base@11.0.6/Unknown Source)
        at java.util.concurrent.CompletableFuture.supplyAsync(java.base@11.0.6/Unknown Source)
        at com.inductiveautomation.ignition.client.sqltags.impl.SubManagerAdapter.readAsync(SubManagerAdapter.java:134)
        at com.inductiveautomation.ignition.client.tags.impl.ClientTagManagerImpl.lambda$readAsync$0(ClientTagManagerImpl.java:174)
        at com.inductiveautomation.ignition.client.tags.impl.ClientTagManagerImpl$$Lambda$465/0x0000000100bb5840.map(Unknown Source)
        at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.lambda$groupMapCollate$0(GroupMapCollate.java:25)
        at com.inductiveautomation.ignition.gateway.util.GroupMapCollate$$Lambda$466/0x0000000100bb5c40.map(Unknown Source)
        at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.lambda$groupMapCollateIndexed$5(GroupMapCollate.java:53)
        at com.inductiveautomation.ignition.gateway.util.GroupMapCollate$$Lambda$464/0x0000000100bb6440.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(java.base@11.0.6/Unknown Source)
        at java.util.HashMap$EntrySpliterator.forEachRemaining(java.base@11.0.6/Unknown Source)
        at java.util.stream.AbstractPipeline.copyInto(java.base@11.0.6/Unknown Source)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(java.base@11.0.6/Unknown Source)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(java.base@11.0.6/Unknown Source)
        at java.util.stream.AbstractPipeline.evaluate(java.base@11.0.6/Unknown Source)
        at java.util.stream.ReferencePipeline.collect(java.base@11.0.6/Unknown Source)
        at com.inductiveautomation.ignition.common.util.Futures.sequence(Futures.java:26)
        at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.groupMapCollateIndexed(GroupMapCollate.java:62)
        at com.inductiveautomation.ignition.gateway.util.GroupMapCollate.groupMapCollate(GroupMapCollate.java:28)
        at com.inductiveautomation.ignition.client.tags.impl.ClientTagManagerImpl.readAsync(ClientTagManagerImpl.java:172)
        at com.inductiveautomation.ignition.common.tags.model.TagManager.readAsync(TagManager.java:56)
        at com.inductiveautomation.ignition.client.script.LegacyClientTagUtilities.read(LegacyClientTagUtilities.java:143)
        at com.inductiveautomation.ignition.common.script.builtin.LegacyTagUtilities.read(LegacyTagUtilities.java:168)
        at jdk.internal.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.6/Unknown Source)
        at java.lang.reflect.Method.invoke(java.base@11.0.6/Unknown Source)
        at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:188)
        at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:521)
        at org.python.core.PyObject.__call__(PyObject.java:480)
        at org.python.core.PyObject.__call__(PyObject.java:484)
        at org.python.pycode._pyx16.GetNavigationText_RT$2(<module:shared.navigation>:64)
        at org.python.pycode._pyx16.call_function(<module:shared.navigation>)
        at org.python.core.PyTableCode.call(PyTableCode.java:171)
        at org.python.core.PyBaseCode.call(PyBaseCode.java:308)
        at org.python.core.PyFunction.function___call__(PyFunction.java:471)
        at org.python.core.PyFunction.__call__(PyFunction.java:466)
        at org.python.core.PyFunction.__call__(PyFunction.java:456)
        at org.python.core.PyFunction.__call__(PyFunction.java:451)
        at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:815)
        at com.inductiveautomation.ignition.common.expressions.functions.ScriptFunction.execute(ScriptFunction.java:91)
        at com.inductiveautomation.ignition.common.expressions.FunctionExpression.execute(FunctionExpression.java:69)
        at com.inductiveautomation.ignition.client.expressions.ClientFunctionFactory$TranslateFunction.execute(ClientFunctionFactory.java:320)
        at com.inductiveautomation.ignition.client.expressions.ClientDynamicDispatchFunction.execute(ClientDynamicDispatchFunction.java:43)
        at com.inductiveautomation.ignition.client.expressions.ClientDynamicDispatchFunction.execute(ClientDynamicDispatchFunction.java:43)
        at com.inductiveautomation.ignition.common.expressions.FunctionExpression.execute(FunctionExpression.java:69)
        at com.inductiveautomation.ignition.common.expressions.ArithmeticExpression.execute(ArithmeticExpression.java:60)
        at com.inductiveautomation.ignition.common.expressions.ArithmeticExpression.execute(ArithmeticExpression.java:59)
        at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.runExpression(ExpressionPropertyAdapter.java:83)
        at com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter$1.run(ExpressionPropertyAdapter.java:59)
        at com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:127)
        at java.awt.event.InvocationEvent.dispatch(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue$4.run(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventQueue$4.run(java.desktop@11.0.6/Unknown Source)
        at java.security.AccessController.doPrivileged(java.base@11.0.6/Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@11.0.6/Unknown Source)
        at java.awt.EventQueue.dispatchEvent(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(java.desktop@11.0.6/Unknown Source)
        at java.awt.EventDispatchThread.run(java.desktop@11.0.6/Unknown Source)

   Locked ownable synchronizers:
        - None

stacktrace1.txt (52.8 KB) stacktrace2.txt (63.6 KB)

I found the issue.

Apparently there was a recursive property binding that wasn’t used anymore (the expression even contained a tag that has been removed).

It was basically something like:

Property A binding: if({non/existing/tag}, {property B}, {property A})

2 Likes

hello, how did you find that error?

I have something similar but I honestly don't know where exactly to look for it.


{
  "version": "8.1.26.2023032308",
  "threads": [
    {
      "name": "Attach Listener",
      "id": 5,
      "state": "RUNNABLE",
      "daemon": true,
      "system": "None",
      "scope": "Client"
    },
    {
      "name": "AWT-EventQueue-0",
      "id": 19,
      "state": "RUNNABLE",
      "daemon": false,
      "system": "None",
      "scope": "Client",
      "lockedMonitors": [
        {
          "lock": "java.lang.Object@474b8009",
          "frame": "com.inductiveautomation.ignition.client.util.EDTUtil.coalescingInvokeLater(EDTUtil.java:182)"
        }
      ],
      "stacktrace": [
        "java.base@11.0.18/java.security.AccessController.getStackAccessControlContext(Native Method)",
        "java.base@11.0.18/java.security.AccessController.getContext(Unknown Source)",
        "java.desktop@11.0.18/java.awt.AWTEvent.<init>(Unknown Source)",
        "java.desktop@11.0.18/java.awt.event.InvocationEvent.<init>(Unknown Source)",
        "java.desktop@11.0.18/java.awt.event.InvocationEvent.<init>(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventQueue.invokeLater(Unknown Source)",
        "com.inductiveautomation.ignition.client.util.EDTUtil.coalescingInvokeLater(EDTUtil.java:182)",
        "com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.childInteractionUpdated(ExpressionPropertyAdapter.java:52)",
        "com.inductiveautomation.factorypmi.application.binding.PropertyListenerDescriptor.propertyChange(PropertyListenerDescriptor.java:74)",
        "java.desktop@11.0.18/java.beans.PropertyChangeSupport.fire(Unknown Source)",
        "java.desktop@11.0.18/java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)",
        "java.desktop@11.0.18/java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)",
        "java.desktop@11.0.18/java.awt.Component.firePropertyChange(Unknown Source)",
        "java.base@11.0.18/jdk.internal.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)",
        "java.base@11.0.18/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)",
        "java.base@11.0.18/java.lang.reflect.Method.invoke(Unknown Source)",
        "com.inductiveautomation.factorypmi.application.binding.util.DynamicPropertyUtil.firePropertyChange(DynamicPropertyUtil.java:291)",
        "com.inductiveautomation.factorypmi.application.binding.util.DynamicPropertyUtil.setPropertyValue(DynamicPropertyUtil.java:282)",
        "com.inductiveautomation.factorypmi.application.components.PMILabel.setPropertyValue(PMILabel.java:275)",
        "com.inductiveautomation.factorypmi.application.binding.AbstractPropertyAdapter.updateTarget(AbstractPropertyAdapter.java:304)",
        "com.inductiveautomation.factorypmi.application.binding.AbstractPropertyAdapter.updateValue(AbstractPropertyAdapter.java:271)",
        "com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter.runExpression(ExpressionPropertyAdapter.java:89)",
        "com.inductiveautomation.factorypmi.application.binding.ExpressionPropertyAdapter$1.run(ExpressionPropertyAdapter.java:59)",
        "com.inductiveautomation.ignition.client.util.EDTUtil$ProcessQueue.run(EDTUtil.java:126)",
        "java.desktop@11.0.18/java.awt.event.InvocationEvent.dispatch(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventQueue.dispatchEventImpl(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventQueue$4.run(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventQueue$4.run(Unknown Source)",
        "java.base@11.0.18/java.security.AccessController.doPrivileged(Native Method)",
        "java.base@11.0.18/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventQueue.dispatchEvent(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventDispatchThread.pumpEvents(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventDispatchThread.pumpEvents(Unknown Source)",
        "java.desktop@11.0.18/java.awt.EventDispatchThread.run(Unknown Source)"
      ]
    },
    {
      "name": "AWT-Shutdown",
      "id": 14,
      "state": "WAITING",
      "daemon": false,
      "system": "None",
      "scope": "Client",
      "waitingFor": {
        "lock": "java.lang.Object@b4ba528"
      },
      "stacktrace": [
        "java.base@11.0.18/java.lang.Object.wait(Native Method)",
        "java.base@11.0.18/java.lang.Object.wait(Unknown Source)",
        "java.desktop@11.0.18/sun.awt.AWTAutoShutdown.run(Unknown Source)",
        "java.base@11.0.18/java.lang.Thread.run(Unknown Source)"
      ]
    },
    {
      "name": "AWT-Windows",
      "id": 15,
      "state": "RUNNABLE",
      "daemon": true,
      "system": "None",
      "scope": "Client",
      "stacktrace": [
        "java.desktop@11.0.18/sun.awt.windows.WToolkit.eventLoop(Native Method)",
        "java.desktop@11.0.18/sun.awt.windows.WToolkit.run(Unknown Source)",
        "java.base@11.0.18/java.lang.Thread.run(Unknown Source)"
      ]
    },
    {

One expression binding is evaluating, and that first expression binding is causing another one (located on a label) to re-evaluate. Vision has no protection against circular bindings, so it's possible this is causing an infinite loop that's locking up the event dispatch thread.

1 Like

thanks for your prompt reply
well the truth is that i have many expressions linked to tags etc, i would have to check one by one for which one is being reevaluated. is there any way to be more specific to locate these problems?

Not with a thread dump. It's too 'coarse' to capture fine-grained details like that; all bindings are equivalent in terms of stack trace. You could try running the client/designer from the command line (take the command line string from the client/designer launcher logs) and seeing if there's more useful output in the stdout/stderr of the process independent of the GUI thread/output console.

I'd definitely recommend contacting support.