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)