User: schulze
Date: 00/10/13 13:11:36
Modified: src/main/org/jboss/test/load/test Client.java Worker.java
Log:
some fine tuning for the load test
Revision Changes Path
1.3 +60 -29 jbosstest/src/main/org/jboss/test/load/test/Client.java
Index: Client.java
===================================================================
RCS file:
/products/cvs/ejboss/jbosstest/src/main/org/jboss/test/load/test/Client.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Client.java 2000/10/10 02:17:56 1.2
+++ Client.java 2000/10/13 20:11:36 1.3
@@ -2,6 +2,7 @@
import java.util.Properties;
import java.util.StringTokenizer;
+import java.util.Hashtable;
import org.jboss.jmx.client.Deployer;
@@ -21,7 +22,7 @@
* </dl>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a>
-* @version $Id: Client.java,v 1.2 2000/10/10 02:17:56 schulze Exp $
+* @version $Id: Client.java,v 1.3 2000/10/13 20:11:36 schulze Exp $
*/
public class Client
{
@@ -48,6 +49,20 @@
System.out.println("Welcome to the Load Test v0.1");
System.out.println("_____________________________________________");
System.out.println();
+ System.out.println("the following optional parameters are supported:");
+ System.out.println(" loops=<number> number of test loops per thread");
+ System.out.println(" beans=<number> number of beans used per thread");
+ System.out.println(" threads=<number> number of threads getting started");
+ System.out.println(" delay=<millisec> delay between the thread start");
+ System.out.println(" verbose - gives infos about bean creation/removing");
+ System.out.println(" noremove - keeps the created beans after finish");
+ System.out.println(" nodeploy - does not deploy anything");
+ System.out.println(" (by default the testbeans.jar from this
testsuite");
+ System.out.println(" is deployed (the test needs the
nextgen.EnterpriseEntity)");
+ System.out.println(" name=<string> name of the threads");
+ System.out.println("for batch use: in case of any failure it returns != 0");
+ System.out.println ();
+
if (param.get ("nodeploy") == null)
{
System.out.print("Deploying test beans...");
@@ -85,43 +100,55 @@
private int test1 ()
{
- //System.out.println("Test (I):");
+ Hashtable config = new Hashtable ();
+
- boolean verbose = false;
- verbose = param.getProperty ("verbose") != null;
+ config.put ("verbose", new Boolean (param.getProperty ("verbose") != null));
+ config.put ("noremove", new Boolean (param.getProperty ("noremove") != null));
- int threads = 50;
- try {
- threads = Integer.parseInt (param.getProperty ("threads"));
- } catch (Exception _e){
- System.out.println("no (or wrong) thread number specified. using default:
" + threads);
- }
int beans = 5;
try {
beans = Integer.parseInt (param.getProperty ("beans"));
} catch (Exception _e) {
System.out.println("no (or wrong) number of beans (per thread) specified.
using default: " + beans);
}
+ config.put ("beans", new Integer (beans));
+
int loops = 100;
try {
loops = Integer.parseInt (param.getProperty ("loops"));
} catch (Exception _e){
System.out.println("no (or wrong) number of loops specified. using
default: " + loops);
}
- String name = param.getProperty ("name", "daniel");
+ config.put ("loops", new Integer (loops));
+
+ config.put ("name", param.getProperty ("name", "daniel") );
+
+ int threads = 50;
+ try {
+ threads = Integer.parseInt (param.getProperty ("threads"));
+ } catch (Exception _e){
+ System.out.println("no (or wrong) thread number specified. using default:
" + threads);
+ }
+ int delay = 1000;
+ try {
+ delay = Integer.parseInt (param.getProperty ("delay"));
+ } catch (Exception _e){
+ System.out.println("no (or wrong) delay (millisec between each thread
start) specified. using default: " + delay);
+ }
System.out.println ("start test1 with "+threads+" threads, "+beans+" beans
per thread in "+loops+" loops.");
System.out.println("------------------------------------------------------");
ThreadGroup threadGroup = new ThreadGroup ("workers");
- Thread[] workers = new Thread[threads];
-
- long start = System.currentTimeMillis ();
+ Worker[] workers = new Worker[threads];
// create and start threads...
for (int i = 0; i < threads; ++i)
{
- workers[i] = new Worker (threadGroup, i, name, verbose, beans, loops);
+ Hashtable cfg = (Hashtable)config.clone ();
+ cfg.put ("number", new Integer (i));
+ workers[i] = new Worker (threadGroup, cfg);
workers[i].start ();
// because of problems with Windows 2000...
// (on W2000 the server couldnt serve this many connection
@@ -129,7 +156,7 @@
// .. this hack:
try
{
- Thread.currentThread ().sleep (500);
+ Thread.currentThread ().sleep (delay);
} catch (InterruptedException _ie)
{ // shoudnt happen...
}
@@ -146,15 +173,21 @@
System.out.print ("Main thread interrupted?!");
}
- long stop = System.currentTimeMillis ();
- int time = (int)(stop - start)/1000;
-
- // determine success...
+ // make statistic...
int failed = 0;
+ int tx = 0;
+ int time = 0;
for (int i = 0; i < threads; ++i)
- if (((Worker)workers[i]).failed ())
+ {
+ Hashtable cfg = workers[i].getConfig ();
+ if (((Boolean)cfg.get("failed")).booleanValue ())
++failed;
+ tx += ((Integer)cfg.get("transactions")).intValue ();
+ time += ((Integer)cfg.get("time")).intValue ();
+ }
+
+
System.out.println("------------------------------------------------------");
if (failed > 0)
{
@@ -165,17 +198,15 @@
{
System.out.println("Congratulations the test succeeded! :-)");
System.out.println("All threads finished clean.");
- int transactions = threads*beans*loops*2;
- int h = time/3600;
- int m = (time-h*3600)/60;
- System.out.println("statistic: "+transactions+" transactions in "+h+" h
"+m+" min.");
- System.out.println(" transactions per second:
"+(transactions/time));
- System.out.println(" (on short runs the bean creation/deletion
may influence the result!)");
}
+
+ int h = time/3600;
+ int m = (time-h*3600)/60;
+ System.out.println("");
+ System.out.println("statistic: "+tx+" transactions in "+h+" h "+m+" min.");
+ System.out.println(" transactions per second: "+(tx/time));
return failed;
}
-
-
1.2 +57 -35 jbosstest/src/main/org/jboss/test/load/test/Worker.java
Index: Worker.java
===================================================================
RCS file:
/products/cvs/ejboss/jbosstest/src/main/org/jboss/test/load/test/Worker.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Worker.java 2000/10/08 00:03:02 1.1
+++ Worker.java 2000/10/13 20:11:36 1.2
@@ -1,8 +1,10 @@
package org.jboss.test.load.test;
+import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
+import java.lang.reflect.UndeclaredThrowableException;
import javax.ejb.*;
@@ -15,42 +17,38 @@
* After completition the beans are removed on fail the beans are not removed.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Schulze</a>
-* @version $Id: Worker.java,v 1.1 2000/10/08 00:03:02 schulze Exp $
+* @version $Id: Worker.java,v 1.2 2000/10/13 20:11:36 schulze Exp $
*/
public class Worker
extends Thread
{
- // beans per thread
- int beans;
- // loops per thread
- int loops;
- // for the log
- String logTag;
- // some more info...
- boolean verbose;
// succcess or not?
- boolean failed = false;
+ Hashtable config;
- Worker (ThreadGroup _group, int _number, String _name, boolean _verbose, int
_beans, int _loops)
+ Worker (ThreadGroup _group, Hashtable _config)
{
- super (_group, _name + "_" + _number);
- beans = _beans;
- loops = _loops;
-
- verbose = _verbose;
-
- logTag = "["+getName ()+"] ";
+ super (_group, (String)_config.get ("name") + "_" +
_config.get("number").toString ());
+ config = _config;
}
/** for the client to ask for success */
- public boolean failed ()
+ public Hashtable getConfig ()
{
- return failed;
+ return config;
}
public void run()
{
+ // get the configuration
+ int beans = ((Integer)config.get ("beans")).intValue ();
+ int loops = ((Integer)config.get ("loops")).intValue ();
+ boolean verbose = ((Boolean)config.get ("verbose")).booleanValue ();
+ boolean remove = !((Boolean)config.get ("noremove")).booleanValue ();
+ String logTag = "["+getName ()+"] ";
+
+ int txs = 0;
+ long start = System.currentTimeMillis ();
EnterpriseEntity[] entity = new EnterpriseEntity[beans];
try
@@ -61,7 +59,7 @@
{
System.out.println (logTag + "EJBHomeInterface lookup returned null?!");
System.out.println (logTag + "died.");
- failed = true;
+ prepareExit (true, txs, start, System.currentTimeMillis ());
return;
}
for (int i = 0; i < beans; ++i)
@@ -75,9 +73,10 @@
{
System.out.println (logTag + "EJBHome.findByPrimaryKey ()
returned null?!");
System.out.println (logTag + "died.");
- failed = true;
+ prepareExit (true, txs, start, System.currentTimeMillis ());
return;
}
+ ++txs;
if (verbose) System.out.println (logTag + "reuse bean:
"+entity[i].getPrimaryKey ());
}
catch (FinderException _fe)
@@ -88,19 +87,22 @@
{
System.out.println (logTag + "EJBHome.create () returned null?!");
System.out.println (logTag + "died.");
- failed = true;
+ prepareExit (true, txs, start, System.currentTimeMillis ());
return;
}
+ ++txs;
if (verbose) System.out.println (logTag + "create bean:
"+entity[i].getPrimaryKey ());
}
}
-
}
catch (Exception _e)
{
System.out.println (logTag+ "problem while finding/creating beans:
"+_e.toString ());
+ if (_e instanceof UndeclaredThrowableException)
+ System.out.println(logTag+ "target exception: " +
((UndeclaredThrowableException)_e).getUndeclaredThrowable().toString());
+
System.out.println (logTag+" died!");
- failed = true;
+ prepareExit (true, txs, start, System.currentTimeMillis ());
return;
}
@@ -110,12 +112,13 @@
try
{
entity[b].setOtherField (0);
+ ++txs;
}
catch (Exception _e)
{
System.out.println (logTag+ "cannot prepare bean #"+b+": "+_e.toString
());
System.out.println (logTag+" died!");
- failed = true;
+ prepareExit (true, txs, start, System.currentTimeMillis ());
return;
}
}
@@ -129,9 +132,11 @@
try
{
value = entity[b].getOtherField ();
+ ++txs;
}
catch (Exception _e)
{
+ prepareExit (true, txs, start, System.currentTimeMillis ());
System.out.println (logTag + "error in getOtherField () on bean
#"+b+" in loop "+l+ ": "+_e.toString ());
if (value != l)
System.out.println (logTag + "unexpected value in bean #"+b+" in
loop "+l);
@@ -140,27 +145,44 @@
try
{
entity[b].setOtherField (l + 1);
+ ++txs;
}
catch (Exception _e)
{
+ prepareExit (true, txs, start, System.currentTimeMillis ());
System.out.println (logTag + "error in setOtherField () on bean
#"+b+" in loop "+l+ ": "+_e.toString ());
}
}
}
+
// remove the beans...
- for (int b = 0; b < beans; ++b)
+ if (remove)
{
- try
- {
- if (verbose) System.out.println (logTag + "remove bean #"+b);
- entity[b].remove ();
- }
- catch (Exception _e)
+ for (int b = 0; b < beans; ++b)
{
- System.out.println (logTag + "error in removing bean #"+b+":
"+_e.toString ());
- //_e.printStackTrace (System.out);
+ try
+ {
+ if (verbose) System.out.println (logTag + "remove bean #"+b);
+ entity[b].remove ();
+ ++txs;
+ }
+ catch (Exception _e)
+ {
+ System.out.println (logTag + "error in removing bean #"+b+":
"+_e.toString ());
+ prepareExit (true, txs, start, System.currentTimeMillis ());
+ //_e.printStackTrace (System.out);
+ }
}
}
+ prepareExit (false, txs, start, System.currentTimeMillis ());
+ }
+
+ private void prepareExit (boolean _failed, int _transactions, long _start, long
_stop)
+ {
+ config.put ("transactions", new Integer (_transactions));
+ config.put ("time", new Integer ((int)(_stop - _start) / 1000));
+ config.put ("failed", new Boolean (_failed));
}
+
}