Author: markt Date: Tue Nov 16 17:48:07 2010 New Revision: 1035709 URL: http://svn.apache.org/viewvc?rev=1035709&view=rev Log: Session manager performance Big performance improvement for Windows. Don't try to create randomIS on every single session creation call
Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=1035709&r1=1035708&r2=1035709&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Tue Nov 16 17:48:07 2010 @@ -73,8 +73,9 @@ public abstract class ManagerBase extend // ----------------------------------------------------- Instance Variables - protected DataInputStream randomIS=null; - protected String devRandomSource="/dev/urandom"; + protected DataInputStream randomIS = null; + protected String devRandomSource = "/dev/urandom"; + protected boolean devRandomSourceIsValid = true; /** * The default message digest algorithm to use if we cannot use @@ -244,9 +245,13 @@ public abstract class ManagerBase extend @Override public DataInputStream run(){ + devRandomSourceIsValid = true; try { File f=new File( devRandomSource ); - if( ! f.exists() ) return null; + if( ! f.exists() ) { + devRandomSourceIsValid = false; + return null; + } randomIS= new DataInputStream( new FileInputStream(f)); randomIS.readLong(); if( log.isDebugEnabled() ) @@ -261,7 +266,7 @@ public abstract class ManagerBase extend log.warn("Failed to close randomIS."); } } - devRandomSource = null; + devRandomSourceIsValid = false; randomIS=null; return null; } @@ -554,6 +559,8 @@ public abstract class ManagerBase extend * - so use it if available. */ public void setRandomFile( String s ) { + // Assume the source is valid until proved otherwise + devRandomSourceIsValid = true; // as a hack, you can use a static file - and generate the same // session ids ( good for strange debugging ) if (Globals.IS_SECURITY_ENABLED){ @@ -562,7 +569,10 @@ public abstract class ManagerBase extend try{ devRandomSource=s; File f=new File( devRandomSource ); - if( ! f.exists() ) return; + if (!f.exists()) { + devRandomSourceIsValid = false; + return; + } randomIS= new DataInputStream( new FileInputStream(f)); randomIS.readLong(); if( log.isDebugEnabled() ) @@ -576,7 +586,7 @@ public abstract class ManagerBase extend log.warn("Failed to close randomIS."); } } - devRandomSource = null; + devRandomSourceIsValid = false; randomIS=null; } } @@ -951,7 +961,7 @@ public abstract class ManagerBase extend protected void getRandomBytes(byte bytes[]) { // Generate a byte array containing a session identifier - if (devRandomSource != null && randomIS == null) { + if (devRandomSourceIsValid && randomIS == null) { setRandomFile(devRandomSource); } if (randomIS != null) { @@ -965,7 +975,7 @@ public abstract class ManagerBase extend } catch (Exception ex) { // Ignore } - devRandomSource = null; + devRandomSourceIsValid = false; try { randomIS.close(); Modified: tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java?rev=1035709&r1=1035708&r2=1035709&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java (original) +++ tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java Tue Nov 16 17:48:07 2010 @@ -108,10 +108,10 @@ public class Benchmarks extends TestCase /* * Results on markt's 4-core dev box - * 1 thread - ~2,300ms - * 2 threads - ~4,600ms - * 4 threads - ~12,300ms - * 16 threads - ~51,000ms + * 1 thread - ~860ms + * 2 threads - ~800ms + * 4 threads - ~1,600ms + * 16 threads - ~6,900ms */ public void testManagerBaseCreateSession() { doTestManagerBaseCreateSession(1, 100000); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org