[
https://issues.apache.org/jira/browse/TOMEE-4120?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17654135#comment-17654135
]
Thomas Lien commented on TOMEE-4120:
------------------------------------
Hi Richard. Thanks for the response. I'm not an active contributor to the code
and I don't have a git checkout even. I'm not sure how I would create a patch
proposal. The same here is mostly informational so someone who knows the
openejb client can review what I'm saying. It may or may not be best way to
resolve this problem but basically just a starting point. I'm certainly no
expert on the openejb so I'm sure someone more familiar with it could come up
with something better.
> Remote EJB2 BMP Memory Leak
> ---------------------------
>
> Key: TOMEE-4120
> URL: https://issues.apache.org/jira/browse/TOMEE-4120
> Project: TomEE
> Issue Type: Bug
> Components: TomEE Core Server
> Affects Versions: 8.0.13
> Environment: I am using apache-tomee-plus-8.0.13 under windows 10 and
> jdk 8.
> Reporter: Thomas Lien
> Priority: Critical
> Attachments: mem1.png, mem2.png, mem3.png, memoryleak.png,
> test.ear.zip, testjar-src.zip
>
>
> I'm seeing a significant memory leak when loading ejb2 bmps remotely. I've
> found that any ejb2 bmp finder function has a leak on on the client side. The
> problem eventually causes our client application to crash with an out of
> memory error.
> Below is a simple main function I made to demonstrate. If I run this program
> below using a single ejb2 findByPrimaryKey call, memory will grow rapidly. I
> traced it down using the Eclipse Memory Profiler to the
> org.apache.openejb.client.EJBInvocationHandler class retaining memory in a
> ConcurrentHashMap field called liveHandleRegistry. I can see "BMPTestHome:1"
> as the key and a HashSet of WeakReferences as values. Attaching screenshot of
> the eclipse memory profiler which continues to grow the longer the program
> runs (memoryleak.png).
> {code:java}
> package test;
> import javax.naming.InitialContext;
> public class LookupMemTest {
> public static void main(String[] args) throws Exception {
> System.setProperty("java.naming.factory.initial",
> "org.apache.openejb.client.RemoteInitialContextFactory");
> System.setProperty("java.naming.provider.url",
> "http://127.0.0.1:8080/tomee/ejb");
> InitialContext ctx = new InitialContext();
> BMPTestHome bmpTestHome =
> (BMPTestHome)ctx.lookup("BMPTestHome");
> while (!Thread.currentThread().isInterrupted()) {
> bmpTestHome.findByPrimaryKey(new BMPTestPK(1));
> Thread.sleep(5);
> }
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)