[ https://issues.apache.org/jira/browse/GEODE-6267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16743377#comment-16743377 ]
Barry Oglesby commented on GEODE-6267: -------------------------------------- Here are some histograms. Startup: {noformat} num #instances #bytes class name ---------------------------------------------- 1: 66767 8069280 [C 2: 4565 5288072 [B 3: 36908 2952640 java.util.zip.ZipEntry 4: 66702 1600848 java.lang.String 5: 7002 789552 java.lang.Class 6: 5084 567984 [Ljava.lang.Object; 7: 5153 453464 java.lang.reflect.Method 8: 656 388464 [J 9: 11897 380704 java.util.concurrent.ConcurrentHashMap$Node 10: 3954 336880 [Ljava.util.HashMap$Node; 11: 8124 324960 java.util.LinkedHashMap$Entry 12: 10121 323872 java.util.HashMap$Node 13: 4751 198016 [I 14: 10665 170640 java.lang.Object 15: 2131 170480 java.lang.reflect.Constructor 16: 2749 153944 java.util.LinkedHashMap 17: 1619 116568 java.lang.reflect.Field 18: 5503 115384 [Ljava.lang.Class; 19: 2202 105696 java.util.HashMap 20: 118 94864 [Ljava.util.concurrent.ConcurrentHashMap$Node; 21: 2096 80416 [Ljava.lang.String; 22: 1871 74840 java.lang.ref.Finalizer 23: 1175 65800 java.lang.Class$ReflectionData 24: 1409 56360 java.lang.ref.SoftReference 25: 607 53160 [Ljava.lang.reflect.Method; Total 186115 9987688 {noformat} After connecting and disconnecting a client 10000 times: {noformat} num #instances #bytes class name ---------------------------------------------- 1: 229739 15010256 [C 2: 92139 7398488 [Ljava.util.HashMap$Node; 3: 229634 5511216 java.lang.String 4: 61726 3456656 java.util.LinkedHashMap 5: 97956 3134592 java.util.HashMap$Node 6: 64120 2564800 java.util.LinkedHashMap$Entry 7: 35955 2125344 [Ljava.lang.Object; 8: 61804 1977728 java.util.concurrent.ConcurrentHashMap$Node 9: 30485 1954128 [Ljava.util.Hashtable$Entry; 10: 60493 1935776 java.util.Hashtable$Entry 11: 11601 1597640 [B 12: 31760 1524480 java.util.HashMap 13: 30072 1443456 java.util.Properties 14: 30000 1440000 org.apache.shiro.session.mgt.SimpleSession 15: 7477 841096 java.lang.Class 16: 30464 731136 java.util.ArrayList 17: 30009 720216 java.util.Date 18: 10003 720216 org.apache.geode.distributed.internal.membership.gms.GMSMember 19: 30000 720000 TestPrincipal 20: 30000 720000 org.apache.shiro.subject.SimplePrincipalCollection 21: 122 485904 [Ljava.util.concurrent.ConcurrentHashMap$Node; 22: 10003 480144 org.apache.geode.distributed.internal.membership.InternalDistributedMember 23: 30007 480112 java.util.LinkedHashSet 24: 732 405536 [J 25: 20815 333040 java.lang.Object Total 1403107 61797808 {noformat} After connecting and disconnecting a client enough times to create ~182k SimpleSessions: {noformat} num #instances #bytes class name ---------------------------------------------- 1: 1252634 78052152 [C 2: 552473 44224760 [Ljava.util.HashMap$Node; 3: 1252511 30060264 java.lang.String 4: 368616 20642496 java.util.LinkedHashMap 5: 558197 17862304 java.util.HashMap$Node 6: 371010 14840400 java.util.LinkedHashMap$Entry 7: 183930 11774608 [Ljava.util.Hashtable$Entry; 8: 367383 11756256 java.util.Hashtable$Entry 9: 189397 10719072 [Ljava.lang.Object; 10: 317462 10158784 java.util.concurrent.ConcurrentHashMap$Node 11: 185203 8889744 java.util.HashMap 12: 183517 8808816 java.util.Properties 13: 183445 8805360 org.apache.shiro.session.mgt.SimpleSession 14: 62707 7321352 [B 15: 183909 4413816 java.util.ArrayList 16: 183454 4402896 java.util.Date 17: 183445 4402680 TestPrincipal 18: 183445 4402680 org.apache.shiro.subject.SimplePrincipalCollection 19: 61108 4399776 org.apache.geode.distributed.internal.membership.gms.GMSMember 20: 183452 2935232 java.util.LinkedHashSet Total 7692368 330322672 {noformat} > Subjects are not logged out when a client departs causing a memory leak > ----------------------------------------------------------------------- > > Key: GEODE-6267 > URL: https://issues.apache.org/jira/browse/GEODE-6267 > Project: Geode > Issue Type: Bug > Components: security > Reporter: Barry Oglesby > Assignee: Barry Oglesby > Priority: Major > > When a client with security enabled connects to a server, the > IntegratedSecurityService logs in a Subject. This causes a SimpleSession to > be created. > The Subject is stored in ClientUserAuths.uniqueIdVsSubject. > Here is a stack showing the SimpleSession creation: > {noformat} > [warning 2019/01/08 18:02:42.993 PST server1 <ServerConnection on port 40401 > Thread 0> tid=0x4e] SimpleSession.<init> invoked: > java.lang.Exception > at org.apache.shiro.session.mgt.SimpleSession.<init>(SimpleSession.java:99) > at > org.apache.shiro.session.mgt.SimpleSessionFactory.createSession(SimpleSessionFactory.java:44) > at > org.apache.shiro.session.mgt.DefaultSessionManager.newSessionInstance(DefaultSessionManager.java:163) > at > org.apache.shiro.session.mgt.DefaultSessionManager.doCreateSession(DefaultSessionManager.java:154) > at > org.apache.shiro.session.mgt.AbstractValidatingSessionManager.createSession(AbstractValidatingSessionManager.java:136) > at > org.apache.shiro.session.mgt.AbstractNativeSessionManager.start(AbstractNativeSessionManager.java:99) > at > org.apache.shiro.mgt.SessionsSecurityManager.start(SessionsSecurityManager.java:152) > at > org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:336) > at > org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:312) > at > org.apache.shiro.mgt.DefaultSubjectDAO.mergePrincipals(DefaultSubjectDAO.java:204) > at > org.apache.shiro.mgt.DefaultSubjectDAO.saveToSession(DefaultSubjectDAO.java:166) > at org.apache.shiro.mgt.DefaultSubjectDAO.save(DefaultSubjectDAO.java:147) > at > org.apache.shiro.mgt.DefaultSecurityManager.save(DefaultSecurityManager.java:383) > at > org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:350) > at > org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:183) > at > org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:283) > at > org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256) > at > org.apache.geode.internal.security.IntegratedSecurityService.login(IntegratedSecurityService.java:139) > at > org.apache.geode.internal.cache.tier.sockets.HandShake.verifyCredentials(HandShake.java:1688) > at > org.apache.geode.internal.cache.tier.sockets.ServerConnection.setCredentials(ServerConnection.java:1044) > at > org.apache.geode.internal.cache.tier.sockets.command.PutUserCredentials.cmdExecute(PutUserCredentials.java:52) > at > org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:163) > at > org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:797) > at > org.apache.geode.internal.cache.tier.sockets.LegacyServerConnection.doOneMessage(LegacyServerConnection.java:85) > at > org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1179) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$4$1.run(AcceptorImpl.java:641) > at java.lang.Thread.run(Thread.java:745) > {noformat} > When the client disconnects, the ClientUserAuths is cleaned up (in cleanup), > but the Subjects are not logged out. > With subscription-enabled=true, an additional Subject is created and stored > in the CacheClientProxy subject. This Subject is not logged out either. > Here is a stack showing the SimpleSession creation: > {noformat} > [warning 2019/01/08 18:02:43.023 PST server1 <Client Queue Initialization > Thread 0> tid=0x52] SimpleSession.<init> invoked: > java.lang.Exception > at org.apache.shiro.session.mgt.SimpleSession.<init>(SimpleSession.java:99) > at > org.apache.shiro.session.mgt.SimpleSessionFactory.createSession(SimpleSessionFactory.java:44) > at > org.apache.shiro.session.mgt.DefaultSessionManager.newSessionInstance(DefaultSessionManager.java:163) > at > org.apache.shiro.session.mgt.DefaultSessionManager.doCreateSession(DefaultSessionManager.java:154) > at > org.apache.shiro.session.mgt.AbstractValidatingSessionManager.createSession(AbstractValidatingSessionManager.java:136) > at > org.apache.shiro.session.mgt.AbstractNativeSessionManager.start(AbstractNativeSessionManager.java:99) > at > org.apache.shiro.mgt.SessionsSecurityManager.start(SessionsSecurityManager.java:152) > at > org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:336) > at > org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:312) > at > org.apache.shiro.mgt.DefaultSubjectDAO.mergePrincipals(DefaultSubjectDAO.java:204) > at > org.apache.shiro.mgt.DefaultSubjectDAO.saveToSession(DefaultSubjectDAO.java:166) > at org.apache.shiro.mgt.DefaultSubjectDAO.save(DefaultSubjectDAO.java:147) > at > org.apache.shiro.mgt.DefaultSecurityManager.save(DefaultSecurityManager.java:383) > at > org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:350) > at > org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:183) > at > org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:283) > at > org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256) > at > org.apache.geode.internal.security.IntegratedSecurityService.login(IntegratedSecurityService.java:139) > at > org.apache.geode.internal.cache.tier.sockets.HandShake.verifyCredentials(HandShake.java:1688) > at > org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerGFEClient(CacheClientNotifier.java:343) > at > org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerClient(CacheClientNotifier.java:279) > at > org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$ClientQueueInitializerTask.run(AcceptorImpl.java:1844) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$3$1.run(AcceptorImpl.java:611) > at java.lang.Thread.run(Thread.java:745) > {noformat} > Both of these cause a memory leak of SimpleSessions. > In my simple test where a client with subscription-enabled=true connects and > disconnects, 3 SimpleSessions are created. Each additional client > connect/disconnect causes 3 more SimpleSessions to be created. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)