Binary Message Too Large in Ignition Designer

Hey everyone,

Our team recently upgraded to Ignition 8.3.1. Overall, our upgrade process was pretty smooth. This is our “main” Ignition gateway, and we have almost 10 other Ignition gateways that are incoming connections to this main. The connections were not really affected by the upgrade.

We do see one issue now that we have not seen before. On our main gateway, we also have it set up where it can view the other gateway’s default and system tag browser.

I get this error when I open one of the folders from a different tag browser:

11:54:52.899 [WebSocket@1841252200-49] ERROR com.inductiveautomation.ignition.client.gateway_interface.GatewayConnectionManager -- WebSocket error
org.eclipse.jetty.websocket.api.exceptions.MessageTooLargeException: Binary message too large: 2,113,509 > 2,097,152

In the same tag browser, I can open smaller folder that has less tags and I do not see this issue. I think I understand the error of there being too much data and agree this folder has a lot of data (several dataset tags), I just do not recall experiencing this issue before upgrading.

Does anyone have thoughts on this or does anyone know of a setting that can be changed to allow for larger messages? I can provide more information if it will help. Thank you all so much!

This is an issue we're tracking internally - some "under the hood" changes caused this issue to start occurring in 8.3 and we're going to make some further changes to resolve it in the future.

In the meantime, you can add a system property via the ignition.conf file that sets a larger size, in kB, for the ignition.designer.websocketMaxBinaryMessageSize property.

The default is 2048.

So all together you should end up adding a line like:
wrapper.java.additional.9=-Dignition.designer.websocketMaxBinaryMessageSize=4096

EDIT:
Alternately, if you're getting this message too large error in the designer, then you need to close the designer and edit the application launch settings in the Designer Launcher.
In the 'Additional JVM Arguments', add a system property override:
-Dignition.designer.websocketMaxBinaryMessageSize=4096

7 Likes

So running into the same issue and this solution is not working for us on 8.3.2. Do you have any other suggestions?

edit: Looking at the logs I can see that even though we added that to the config the error still indicates in bytes that the limit is 2048. So for some reason its not updating properly.

Did you restart after modifying ignition.conf?

edit: also I would have thought this property needed to be set when launching the Designer and not in ignition.conf... but :person_shrugging:

I did and before seeing your message I instead added it as a JVM argument and that resolved the issue. I was just coming back to update my post! Thank you though for suggesting the correct solution.

Edit: Just to clarify for other users that have this issue and come to this thread. What worked for me was going to manage for the application I want to launch in designer and adding this as a JVM argument: -Dignition.designer.websocketMaxBinaryMessageSize=4096

3 Likes

It depends on which side of the handshake the too large message is coming from. For the original poster, it was happening on the gateway side. It's the same system property either way, though. I'll update my first post to clarify.

1 Like

Similar issue here with 8.3.4. Adding the property on ignition.conf and on Designer Launcher did not help. It is still stuck on 2048. Any ideas what to check?
Added ignition.conf current version:

#encoding=UTF-8
# Configuration files must begin with a line specifying the encoding
#  of the the file.

#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
#  License Key to start.  Licenses can be purchased or a trial license
#  requested on the following pages:
# http://wrapper.tanukisoftware.com/purchase
# http://wrapper.tanukisoftware.com/trial

# Include file problems can be debugged by removing the first '#'
#  from the following line:
##include.debug

# The Wrapper will look for either of the following optional files for a
#  valid License Key.  License Key properties can optionally be included
#  directly in this configuration file.
#include ./wrapper-license.conf

# The following property will output information about which License Key(s)
#  are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE

#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the locale which the Wrapper should use.  By default the system
#  locale is used.
#wrapper.lang=en_US # en_US or ja_JP

# Specify the location of the Wrapper's language resources.  If these are
#  missing, the Wrapper will default to the en_US locale.
wrapper.lang.folder=../lang

#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
#  Locate the java binary on the system PATH:
#  Specify a specific java binary:
set.JAVA_HOME=lib/runtime/jre-nix
wrapper.java.command=%JAVA_HOME%/bin/java

# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.  Helper
#  classes are provided to do this for you.  See the Integration section
#  of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=lib/wrapper.jar
wrapper.java.classpath.2=lib/core/common/*
wrapper.java.classpath.3=lib/core/gateway/*

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=lib
wrapper.java.library.path.2=lib/core/gateway

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
#wrapper.java.additional.auto_bits=TRUE
wrapper.java.additional.auto_bits.macosx=FALSE

# Java Additional Parameters
wrapper.java.additional.1=-Ddata.dir=data
wrapper.java.additional.2=--add-opens=java.base/java.lang=ALL-UNNAMED
wrapper.java.additional.3=--add-opens=java.base/java.io=ALL-UNNAMED
wrapper.java.additional.4=--add-opens=java.base/java.security.cert=ALL-UNNAMED
wrapper.java.additional.5=--add-opens=java.base/java.util=ALL-UNNAMED
wrapper.java.additional.6=--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED
wrapper.java.additional.7=-Dignition.designer.websocketMaxBinaryMessageSize=4096
#wrapper.java.additional.7=-Xdebug
#wrapper.java.additional.8=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
#wrapper.java.additional.9=-Dedition=

# Initial Java Heap Size (in MB)
wrapper.java.initmemory=2048

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=24576

# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=com.inductiveautomation.catapult.Catapult

wrapper.shutdown.timeout=120
wrapper.jvm_exit.timeout=120

# Set this value to TRUE to allow ignition.conf to be reloaded when the JVM is restarted
wrapper.restart.reload_configuration=TRUE

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE

# Format of output for the console.  (See docs for formats)
wrapper.console.format=PM

# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for wrapper output logging.
wrapper.logfile=logs/wrapper.log

# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=LPTM

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=10m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=5

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE

#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE

# Title to use when running as a console
wrapper.console.title=Ignition Gateway

#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
#wrapper.check.deadlock=TRUE
#wrapper.check.deadlock.interval=60
#wrapper.check.deadlock.action=RESTART
#wrapper.check.deadlock.output=FULL

# Out Of Memory detection.
#wrapper.filter.trigger.1000=java.lang.OutOfMemoryError
#wrapper.filter.action.1000=RESTART
#wrapper.filter.message.1000=The JVM has run out of memory.

wrapper.on_exit.default=SHUTDOWN
wrapper.on_exit.2=RESTART

#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>

# Configure the log attached to event emails.
#wrapper.event.default.email.attach_log=TRUE
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO

# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE

# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n

#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.  The
#  service can then be reinstalled.

# Name of the service
wrapper.name=Ignition

# Display name of the service
wrapper.displayname=Ignition Gateway

# Description of the service
wrapper.description=Ignition Gateway

# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=

# Mode in which the service is installed.  AUTO_START, DELAY_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false

#VERSION - DO NOT MODIFY: 16


What did you set the number to? I would try a high number to ensure you have it set high enough. I started out at the number in my post above but as we have added more that the problem tag I have had to double it since then so I just made it high enough that I don’t have to worry about it for awhile.

Problem: Still seeing this error in Gateway logs (when trying to view larger amount of string tags (JSON Payloads))
WebSocket closed with statusCode='1009', reason='Binary message too large: 2 097 974 > 2 097 152'

Actions:
Added this to ignition.conf
wrapper.java.additional.7=-Dignition.designer.websocketMaxBinaryMessageSize=4096

and

-Dignition.designer.websocketMaxBinaryMessageSize=4096 to Designer.

Edit: I added this to the Designer overall settings (Designer Defaults) but it did not help. Fixed it by adding the JVM argument to the specific Designer Launcher connection.

It's a little confusing, but the defaults only affect new Designer entries you add to the Designer Launcher.

1 Like