Hi everyone,
I’m experiencing an issue with high memory usage on an Ignition 8.1.x Gateway, running on Windows Server 2019.
The server has 16 GB of RAM, with 12 GB allocated as the maximum heap for Ignition, while the initial heap is set to 4 GB.
When users open certain screens (Vision / Perspective), the Gateway memory usage increases significantly, which is expected. However, after closing those screens, the memory is not released or takes a long time to decrease (in some cases more than 30 minutes), and does not return to a stable baseline.
With continued system usage and repeated opening of these screens by multiple users, the heap usage keeps growing over time, eventually leading to Gateway restarts caused by OutOfMemoryError in some cases.
Environment Details
-
Operating System: Windows Server 2019
-
Total server memory: 16 GB RAM
-
Ignition maximum heap size: 12 GB
-
Ignition initial heap size: 4 GB
-
Ignition version: 8.1.x
-
Java: Java 11 (bundled with Ignition)
-
Garbage Collector: default configuration (G1GC, to be confirmed)
-
Memory increase is mainly triggered by opening specific screens
-
Screens include:
-
Bindings to Named Queries
-
Historical data queries
-
Components with relatively large datasets
-
I understand that the JVM does not immediately release memory and that Garbage Collection is demand-driven. However, in this case, the heap does not appear to stabilize, and instead continues to grow until it causes Gateway restarts.
Questions
-
Is allocating 12 GB of maximum heap to Ignition on a server with 16 GB of RAM appropriate, or is there a more recommended value?
-
Would it be advisable to increase the initial heap size (currently 4 GB) to improve Garbage Collector behavior and reduce frequent heap expansions?
-
Are there any recommended JVM flags or Garbage Collector tuning options to improve memory management in Ignition?
-
What are the best practices to avoid memory retention related to screens, bindings, queries, or scripting?
-
Is it recommended to enable heap dumps on OutOfMemoryError to diagnose this behavior?
-
Are there any differences in memory management between Ignition 8.1 and Ignition 8.3 that would justify an upgrade?
-
Would migrating to a different Java version improve Garbage Collector performance or memory handling?
-
In cases of excessive memory usage, beyond simply allocating more resources, would implementing Gateway Redundancy help distribute query load and memory consumption, considering that this system is primarily used for monitoring purposes?
Thanks in advance for any guidance or shared experiences.