Memory leak with HttpClientProtocol in Java OpenClient?

Posted by Jon Brock on 11-Mar-2019 13:43

I've got a web interface and some web services written in Java that communicate back to PASOE. After a few days, the heap is filling up with instances of com.progress.ubroker.client.HttpClientProtocol. Manually triggering garbage collection does not help.

We are using a session-free connection and the dynamic API. I am calling _release() and releaseConnection() appropriately. I'm pretty sure all of that code is correct because this memory leak does not occur when using the traditional/legacy appserver, only PASOE.

This occurs in 11.6 and 11.7.

This is roughly the code path:

// connection setup, this object is saved and used across multiple threads
Connection connection = new Connection(url, "", "", "");
connection.setSessionModel(Connection.SM_SESSION_FREE);

// individual call connection.setClientContextID(context);
app = new OpenAppObject(connection, "");
ParamArray params = new ParamArray(...);
app.runProc("something.p", params);
app._release();
connection.releaseConnection();



One extra note, the connection object is recreated after a few hundred reuses (this was a workaround to deal with another memory leak with the legacy appserver).

Has anybody run into this? Am I doing it wrong?

Posted by Peter van Dam on 11-Mar-2019 14:38

I guess you found a new one then - I would suggest to create a call for it (seems easy to reproduce) so they can fix it.

All Replies

Posted by Peter van Dam on 11-Mar-2019 13:51

Hi Jon,

The early versions of this library contained a lot a memory leaks. Many were fixed in service packs. Have you tried the latest 11.7 service pack?

-peter

Posted by Jon Brock on 11-Mar-2019 13:55

I'm using the o4glrt.jar from OpenEdge Release 11.7.4 as of Wed Oct 10 18:18:59 EDT 2018. I think that's the latest service pack available.

Posted by Peter van Dam on 11-Mar-2019 14:38

I guess you found a new one then - I would suggest to create a call for it (seems easy to reproduce) so they can fix it.

Posted by Jon Brock on 12-Mar-2019 12:48

I downloaded a trial of OE 12.0 and tried using the jars from that to connect to our 11.7 pasoe, and the leak is gone. I will go ahead and log a case for 11.7 though!

Posted by dbeavon on 12-Mar-2019 13:18

Sorry to hijack but since you brought up changes to the openclient in 12, I'd like to hear more. Does anyone have a list of enhancements to the Java openclient in 12? Is the openclient significantly different as-of 12.0? I looked in the "whats new" articles and couldn't find anything.

I'm curious about things like client-side APSV-sessions for session-free connections. In the past the client-side session pool would be invalidated after the HTTP APSV session(s) had reached the timeout that was specified on the server. And the client application wouldn't be able to recover auto-magically on its own (it would throw generic communication exceptions). The rumor is that Progress was going to handle this within management of the pool itself, or in the very least throw a more helpful exception.

Another rumor I'd heard is that the openclient would start allowing errors to be thrown from ABL and serialized/deserialized over to the openclient. In the past the only mechanism was to use the RETURN ERROR statement, which supports a single character string.

Another thing I'm looking for (on the .net side of things) is an APSV openclient that is able to be used on .Net core in addition to the .Net framework.

If anyone has specific news about the openclient in 12 would be appreciated (either java or .net).

This thread is closed