AWT-EventQueue-0 Problems

good morning everyone,

I have a problem that every time I start the ignition/designer a log is created and I think it may be caused by the high performance of the CPU in the gateway.

{
  "version": "8.1.22.2022110109",
  "threads": [
    {
      "name": "Attach Listener",
      "id": 5,
      "state": "RUNNABLE",
      "daemon": true,
      "system": "None",
      "scope": "Designer"
    },
    {
      "name": "AWT-EventQueue-0",
      "id": 20,
      "state": "RUNNABLE",
      "daemon": false,
      "system": "None",
      "scope": "Designer",
      "lockedMonitors": [
        {
          "lock": "java.util.Collections$SynchronizedMap@66627647",
          "frame": "com.inductiveautomation.factorysql.designer.FSQLDesignerModuleHook.getGroupConfigForResourceId(FSQLDesignerModuleHook.java:371)"
        }
      ],
      "stacktrace": [
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.normalizeNewlines(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanContent(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)",
        "java.xml@11.0.16.1/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)",
        "com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeXML(XMLDeserializer.java:393)",
        "com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:270)",
        "com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:248)",
        "com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:180)",
        "com.inductiveautomation.ignition.designer.DesignerContextImpl.deserialize(DesignerContextImpl.java:497)",
        "com.inductiveautomation.factorysql.designer.FSQLDesignerModuleHook.loadGroupConfigForProjectResource(FSQLDesignerModuleHook.java:345)",
        "com.inductiveautomation.factorysql.designer.FSQLDesignerModuleHook.getGroupConfigForResourceId(FSQLDesignerModuleHook.java:371)",
        "com.inductiveautomation.factorysql.designer.FSQLDesignerModuleHook.getConfigObjectForResourceId(FSQLDesignerModuleHook.java:273)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupNavTreeNode.getGroupConfigObject(GroupNavTreeNode.java:136)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupNavTreeNode.init(GroupNavTreeNode.java:105)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupNavTreeNode.<init>(GroupNavTreeNode.java:86)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupFolderNode.createChildNode(GroupFolderNode.java:227)",
        "com.inductiveautomation.ignition.designer.navtree.model.FolderNode.lambda$loadChildren$0(FolderNode.java:216)",
        "com.inductiveautomation.ignition.designer.navtree.model.FolderNode$$Lambda$683/0x000000010104ec40.accept(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.SortedOps$SizedRefSortingSink.end(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.AbstractPipeline.copyInto(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.AbstractPipeline.evaluate(Unknown Source)",
        "java.base@11.0.16.1/java.util.stream.ReferencePipeline.forEachOrdered(Unknown Source)",
        "com.inductiveautomation.ignition.designer.navtree.model.FolderNode.loadChildren(FolderNode.java:214)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.checkChildren(AbstractNavTreeNode.java:294)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupFolderNode.install(GroupFolderNode.java:242)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.setChildren(AbstractNavTreeNode.java:556)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.checkChildren(AbstractNavTreeNode.java:294)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupFolderNode.install(GroupFolderNode.java:242)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.setChildren(AbstractNavTreeNode.java:556)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.checkChildren(AbstractNavTreeNode.java:294)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupFolderNode.install(GroupFolderNode.java:242)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.setChildren(AbstractNavTreeNode.java:556)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.checkChildren(AbstractNavTreeNode.java:294)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupFolderNode.install(GroupFolderNode.java:242)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.setChildren(AbstractNavTreeNode.java:556)",
        "com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.checkChildren(AbstractNavTreeNode.java:294)",
        "com.inductiveautomation.factorysql.designer.model.navtree.GroupFolderNode.install(GroupFolderNode.java:242)",
        "com.inductiveautomation.factorysql.designer.model.navtree.RootTreeNode.install(RootTreeNode.java:77)",
        "com.inductiveautomation.ignition.designer.navtree.model.MutableNavTreeNode.add(MutableNavTreeNode.java:37)",
        "com.inductiveautomation.ignition.designer.navtree.model.MutableNavTreeNode.lambda$addChild$0(MutableNavTreeNode.java:25)",
        "com.inductiveautomation.ignition.designer.navtree.model.MutableNavTreeNode$$Lambda$464/0x0000000100bdfc40.run(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.event.InvocationEvent.dispatch(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventQueue.dispatchEventImpl(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventQueue$4.run(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventQueue$4.run(Unknown Source)",
        "java.base@11.0.16.1/java.security.AccessController.doPrivileged(Native Method)",
        "java.base@11.0.16.1/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventQueue.dispatchEvent(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventDispatchThread.pumpEvents(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventDispatchThread.pumpEvents(Unknown Source)",
        "java.desktop@11.0.16.1/java.awt.EventDispatchThread.run(Unknown Source)"
      ]
    },
    {
      "name": "AWT-Shutdown",
      "id": 14,
      "state": "WAITING",
      "daemon": false,
      "system": "None",
      "scope": "Designer",
      "waitingFor": {
        "lock": "java.lang.Object@5d1f8c86"
      },
      "stacktrace": [
        "java.base@11.0.16.1/java.lang.Object.wait(Native Method)",
        "java.base@11.0.16.1/java.lang.Object.wait(Unknown Source)",
        "java.desktop@11.0.16.1/sun.awt.AWTAutoShutdown.run(Unknown Source)",
        "java.base@11.0.16.1/java.lang.Thread.run(Unknown Source)"
      ]
    },

Do you have any idea what it is about? or if there is any other post in reference to this type of error where I can investigate it,

thanks

Does your project have a lot of transaction groups? It looks like the Designer is spending a lot of time deserializing SQL Bridge project resources.

yes, I'm practically sending all the easycharts signals through the transaction groups :frowning:

You might want to consider using a scripted alternative to transaction groups if you have more than a few dozen.

hello phil, what other alternatives do you recommend? because practically I have almost all the signals being transmitted by the transaction grups, some are executed every time the value changes and others are executed every second with a record time of 6months.

Any transaction group that records to a DB can be replaced by a script that performs the following:

  • Call system.tag.readBlocking() with a list of needed tags, and/or call system.opc.readValues() with a list of needed OPC Items (or both),

  • Perform any arithmetic necessary for expression items using the above values,

  • Execute system.db.runPrepUpdate() call to INSERT or UPDATE into the database,

  • Perform any writes to handshake tag(s), if applicable. (Many more possibilities than the simple fire-and-forget handshake you otherwise must use.)

The above operations would be called from a gateway timer event or gateway scheduled event for any unconditional groups. You would call from a gateway tag change event for triggered groups. If your trigger condition is an always-run expression item, you would make an expression tag from that expression and monitor changes of the expression tag.

Using scripts allows you to factor out common operations into subroutines, and to monitor multiple tags with a single script (as long as they use the same underlying structures). Multiple unconditional recordings running at the same pace can be packed into a single script using looping and subroutines.

2 Likes

Phil, if this transaction group is ran on a tag change event tied to a boolean tag, how would you prevent the transaction group from running twice (when the tag goes high and when the tag goes low)? Would you have to do a tag read and evaluate in your script? Seems somewhat inefficient if the script is triggered from a tag change and then doing the tag read on the same tag in your script.

Tag change events include the current (and previous) value. Just check if the current value is True before doing things.

2 Likes

Thanks Kevin! you a real one :ok_hand: