So I have an app I wrote using freeopcua. It's been working fine for years. We know our server is extremely overloaded and working to scale out. The app now is getting no replies back from the server when trying to traverse the tags and subscribe. I've hacked the freeopcua library as much as possible trying to increase timeouts and such, but I can't even traverse the tags all the way. Anybody have any thoughts?Thx
Seems like you already know the answer.
Hahaha, but I want someone to lie to me and tell me there's another way;).
If its killing production, can you not justify a souped up multiple-chipset many-cored compute server to which you simply move your Ignition server? Tricked out with gobs of RAM and NVMe storage?
It's in the cloud, I kept upping the instance size, it's on a vm with 64vcpu and near 400Gb of memory with over 300Gb dedicated to java. It helped slightly, as I could get through more tags before it died, but it still died well before finishing going through tags and subscribing to the ones it needed to.
How many tags does it have? How many devices? Are you accessing exposed tags or device tags?
Your project sounds like a disaster, so I'm hesitant to get myself involved, but you've piqued my curiosity at the same time, because it's not usually the OPC UA server that is ever "overloaded", it's usually just PLCs that can't keep up.
All of this grows daily. We are going to scale out, but management dragged their feet and now it's an emergency.
All devices using ModbusTCP.
Hmm. Pushing it on device count for sure, but I don't know why that would cause your client to be unable to finish a browse.
OPC UA browses aren't recursive, they are one level at a time, each level is a new Browse request from the client, so not sure why you'd be seeing timeouts. Maybe a Wireshark capture of your client trying to browse the entire address space would be useful.
We've had issues with the browsing for years, I've had to put sleeps before calling any functions that make requests to the server for a while. I do the browsing recursive though, since we have basically all udt's.