Ignition Edge OPC-UA server occasionally faults

Every once in a while (maybe once or twice a month) my version of Ignition Edge (8.1.14) will experience a fault with the default “Ignition OPC UA Server”. The server will continuously loop between “Connecting” and “FAULTED”.

Below I’ve pasted the error message I get from the server monitoring page:


UaException: status=Bad_Timeout, message=timed out waiting for secure channel
	at org.eclipse.milo.opcua.stack.client.transport.uasc.UascClientMessageHandler.lambda$handlerAdded$2(UascClientMessageHandler.java:135)
	at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:672)
	at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:747)
	at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:472)
	at java.base/java.lang.Thread.run(Unknown Source)

And below I’ve put what I believe are relevant snippets from the error logs (screenshots + content):

and

java.lang.OutOfMemoryError: Direct buffer memory
at java.base/java.nio.Bits.reserveMemory(Unknown Source)
at java.base/java.nio.DirectByteBuffer.(Unknown Source)
at java.base/java.nio.ByteBuffer.allocateDirect(Unknown Source)
at io.netty.buffer.PoolArena$DirectArena.allocateDirect(PoolArena.java:645)
at io.netty.buffer.PoolArena$DirectArena.newChunk(PoolArena.java:621)
at io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:204)
at io.netty.buffer.PoolArena.tcacheAllocateSmall(PoolArena.java:174)
at io.netty.buffer.PoolArena.allocate(PoolArena.java:136)
at io.netty.buffer.PoolArena.allocate(PoolArena.java:128)
at io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:378)
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187)
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:178)
at io.netty.buffer.AbstractByteBufAllocator.ioBuffer(AbstractByteBufAllocator.java:139)
at io.netty.channel.DefaultMaxMessagesRecvByteBufAllocator$MaxMessageHandle.allocate(DefaultMaxMessagesRecvByteBufAllocator.java:114)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:150)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.base/java.lang.Thread.run(Unknown Source)

This is on a trial version of Ignition Edge, but otherwise Ignition Edge seems to be functioning with no issues. The only solution seems to be restarting the server. Obviously the internal OPC UA server faulting is a pretty big deal though. Is this normal behavior?

No, not normal. You’re running out of memory for some reason and the OPC UA connection is the first, or one of the things, that is failing as a symptom of that.

Probably best to gather logs and call support so they can take a look.

Never hurts to upgrade to the latest version, either, if that’s an option.

I’ll give support a call, but I’m a little confused on how that might be happening… the current workstation has 128 GB of RAM.

This only seems to happen every so often, sometimes it happens halfway through the day and other times I’ve left it going for days without the server faulting.

Does this have anything to do/might this interact with the wrapper.java.maxmemory setting under data/ignition.conf? Currently it’s set to 1024 (1 GB).

Increasing the memory allocated to Ignition might help, but if there’s a memory leak happening then it’s just going to delay the amount of time before the OOM error instead of fix anything.