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: [email protected]
For additional commands, e-mail: [email protected]