You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Michael Dürig (JIRA)" <ji...@apache.org> on 2014/06/25 10:52:24 UTC

[jira] [Resolved] (OAK-1890) Concurrent System Login: slowdown for high concurrency levels

     [ https://issues.apache.org/jira/browse/OAK-1890?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michael Dürig resolved OAK-1890.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 1.1

Fixed at http://svn.apache.org/r1605292 for 1.1 by regularly purging the scheduler queue to avoid potential memory overhead by many cancelled tasks. 

bq. An alternative would be to use just a single MBean with a TabularData...

Agreed but this might come along with its own set of problems. So I prefer to implement a specific fix for this first. If desired we can still discuss the alternative in its own issue. 



> Concurrent System Login: slowdown for high concurrency levels
> -------------------------------------------------------------
>
>                 Key: OAK-1890
>                 URL: https://issues.apache.org/jira/browse/OAK-1890
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: jcr
>            Reporter: angela
>            Assignee: Michael Dürig
>             Fix For: 1.1
>
>
> output of running the system login/logout test with profiling enabled:
> {quote}
> $ java -Dprofile=true -Xmx2048M org.apache.jackrabbit.oak.run.Main benchmark LoginSystemTest Oak-Tar --concurrency 1,2,4,8,10,15,20,50
> Apache Jackrabbit Oak 1.1-SNAPSHOT
> # LoginSystemTest                  C     min     10%     50%     90%     max       N
> Oak-Tar                            1      12      13      19      24      42     266
> Oak-Tar                            2      12      15      20      24      32     496
> Oak-Tar                            4      20      23      30      37      60     660
> Oak-Tar                            8      41      67      75      85      95     532
> Oak-Tar                           10      77      90      96     113    5166     122
> Oak-Tar                           15     109     127    5559    5673    5701      27
> Oak-Tar                           20    5868    5874    5928    5943    5944      20
> Oak-Tar                           50   22116   22133   22151   22157   22162      50
> Profiler: top 5 stack trace(s) of 70414 ms:
> 1865/21120 (8%):
> at org.apache.jackrabbit.stats.RepositoryStatisticsImpl.getOrCreateRecorder(RepositoryStatisticsImpl.java:99)
> at org.apache.jackrabbit.stats.RepositoryStatisticsImpl.getCounter(RepositoryStatisticsImpl.java:80)
> at org.apache.jackrabbit.oak.stats.StatisticManager.getCounter(StatisticManager.java:81)
> at org.apache.jackrabbit.oak.jcr.session.SessionContext.getCounter(SessionContext.java:182)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl.<init>(SessionImpl.java:89)
> at org.apache.jackrabbit.oak.jcr.session.SessionContext.createSession(SessionContext.java:161)
> at org.apache.jackrabbit.oak.jcr.session.SessionContext.getSession(SessionContext.java:141)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:260)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:195)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest$1.run(LoginSystemTest.java:54)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest$1.run(LoginSystemTest.java:51)
> at java.security.AccessController.doPrivileged(Native Method)
> at javax.security.auth.Subject.doAsPrivileged(Subject.java:515)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.runTest(LoginSystemTest.java:51)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:279)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.execute(LoginSystemTest.java:33)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:288)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.access$000(AbstractTest.java:42)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest$Executor.run(AbstractTest.java:215)
> 1704/21120 (8%):
> at java.lang.Throwable.fillInStackTrace(Native Method)
> at java.lang.Throwable.<init>(Throwable.java:196)
> at java.lang.Exception.<init>(Exception.java:41)
> at org.apache.jackrabbit.oak.jcr.session.SessionStats.<init>(SessionStats.java:40)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.<init>(SessionDelegate.java:154)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl$1.<init>(RepositoryImpl.java:271)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.createSessionDelegate(RepositoryImpl.java:269)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:255)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:195)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest$1.run(LoginSystemTest.java:54)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest$1.run(LoginSystemTest.java:51)
> at java.security.AccessController.doPrivileged(Native Method)
> at javax.security.auth.Subject.doAsPrivileged(Subject.java:515)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.runTest(LoginSystemTest.java:51)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:279)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.execute(LoginSystemTest.java:33)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:288)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.access$000(AbstractTest.java:42)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest$Executor.run(AbstractTest.java:215)
> 1167/21120 (5%):
> at java.lang.Throwable.fillInStackTrace(Native Method)
> at java.lang.Throwable.<init>(Throwable.java:181)
> at java.lang.Exception.<init>(Exception.java:29)
> at java.lang.RuntimeException.<init>(RuntimeException.java:32)
> at java.lang.IllegalStateException.<init>(IllegalStateException.java:27)
> at java.util.concurrent.CancellationException.<init>(CancellationException.java:24)
> at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:220)
> at java.util.concurrent.FutureTask.get(FutureTask.java:83)
> at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:63)
> at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:135)
> at com.google.common.util.concurrent.Futures$4.run(Futures.java:1158)
> at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297)
> at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:101)
> at com.google.common.util.concurrent.ListenableFutureTask.addListener(ListenableFutureTask.java:83)
> at com.google.common.util.concurrent.ForwardingListenableFuture.addListener(ForwardingListenableFuture.java:47)
> at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1172)
> at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1108)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl$1.logout(RepositoryImpl.java:282)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl$10.perform(SessionImpl.java:464)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl$10.perform(SessionImpl.java:460)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:236)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.safePerform(SessionDelegate.java:282)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl.safePerform(SessionImpl.java:132)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl.logout(SessionImpl.java:460)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.runTest(LoginSystemTest.java:51)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:279)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.execute(LoginSystemTest.java:33)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:288)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.access$000(AbstractTest.java:42)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest$Executor.run(AbstractTest.java:215)
> 1161/21120 (5%):
> at org.apache.jackrabbit.stats.RepositoryStatisticsImpl.getOrCreateRecorder(RepositoryStatisticsImpl.java:99)
> at org.apache.jackrabbit.stats.RepositoryStatisticsImpl.getCounter(RepositoryStatisticsImpl.java:80)
> at org.apache.jackrabbit.oak.stats.StatisticManager.getCounter(StatisticManager.java:81)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.<init>(SessionDelegate.java:158)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl$1.<init>(RepositoryImpl.java:271)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.createSessionDelegate(RepositoryImpl.java:269)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:255)
> at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:195)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest$1.run(LoginSystemTest.java:54)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest$1.run(LoginSystemTest.java:51)
> at java.security.AccessController.doPrivileged(Native Method)
> at javax.security.auth.Subject.doAsPrivileged(Subject.java:515)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.runTest(LoginSystemTest.java:51)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:279)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.execute(LoginSystemTest.java:33)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:288)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.access$000(AbstractTest.java:42)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest$Executor.run(AbstractTest.java:215)
> 1156/21120 (5%):
> at java.lang.Throwable.fillInStackTrace(Native Method)
> at java.lang.Throwable.<init>(Throwable.java:196)
> at java.lang.Exception.<init>(Exception.java:41)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate$WarningLock.lock(SessionDelegate.java:695)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate$WarningLock.lock(SessionDelegate.java:700)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:213)
> at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.safePerform(SessionDelegate.java:282)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl.safePerform(SessionImpl.java:132)
> at org.apache.jackrabbit.oak.jcr.session.SessionImpl.logout(SessionImpl.java:460)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.runTest(LoginSystemTest.java:51)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:279)
> at org.apache.jackrabbit.oak.benchmark.LoginSystemTest.execute(LoginSystemTest.java:33)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.execute(AbstractTest.java:288)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest.access$000(AbstractTest.java:42)
> at org.apache.jackrabbit.oak.benchmark.AbstractTest$Executor.run(AbstractTest.java:215)
> summary:
> 27%: org.apache.jackrabbit.stats
> 19%: org.apache.jackrabbit.oak.jcr.session
> 15%: org.apache.jackrabbit.oak.jcr.delegate
> 12%: com.google.common.util.concurrent
> 12%: org.apache.jackrabbit.oak.benchmark
> {quote}



--
This message was sent by Atlassian JIRA
(v6.2#6252)