Session manager performance
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 16 Nov 2010 17:13:29 +0000 (17:13 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 16 Nov 2010 17:13:29 +0000 (17:13 +0000)
Narrow sync - few % improvement

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1035699 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/session/ManagerBase.java
test/org/apache/catalina/session/Benchmarks.java

index 4b2acd5..08c60fa 100644 (file)
@@ -980,7 +980,7 @@ public abstract class ManagerBase extends LifecycleMBeanBase
     /**
      * Generate and return a new session identifier.
      */
-    protected synchronized String generateSessionId() {
+    protected String generateSessionId() {
 
         byte random[] = new byte[16];
         String jvmRoute = getJvmRoute();
@@ -996,8 +996,10 @@ public abstract class ManagerBase extends LifecycleMBeanBase
             }
 
             while (resultLenBytes < this.sessionIdLength) {
-                getRandomBytes(random);
-                random = getDigest().digest(random);
+                synchronized (this) {
+                    getRandomBytes(random);
+                    random = getDigest().digest(random);
+                }
                 for (int j = 0;
                 j < random.length && resultLenBytes < this.sessionIdLength;
                 j++) {
index 99dd1d6..53d98f9 100644 (file)
@@ -108,10 +108,10 @@ public class Benchmarks extends TestCase {
     
     /*
      * Results on markt's 4-core dev box
-     *  1 thread  -  2,422ms
-     *  2 threads -  5,047ms
-     *  4 threads - 13,188ms
-     * 16 threads - 54,422ms
+     *  1 thread  -  ~2,400ms
+     *  2 threads -  ~4,700ms
+     *  4 threads - ~12,600ms
+     * 16 threads - ~53,700ms
      */
     public void testManagerBaseCreateSession() {
         doTestManagerBaseCreateSession(1, 100000);