[ 
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)

Reply via email to