home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1995 November
/
PCWK1195.iso
/
inne
/
win95
/
sieciowe
/
hotja32.lzh
/
hotjava
/
classsrc
/
net
/
www
/
httpd
/
transperf.java
< prev
Wrap
Text File
|
1995-08-11
|
4KB
|
153 lines
/*
* @(#)TransPerf.java 1.1 95/04/03
*
* Copyright (c) 1995 Sun Microsystems, Inc. All Rights reserved Permission to
* use, copy, modify, and distribute this software and its documentation for
* NON-COMMERCIAL purposes and without fee is hereby granted provided that
* this copyright notice appears in all copies. Please refer to the file
* copyright.html for further important copyright and licensing information.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
* OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
* LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
* ITS DERIVATIVES.
*/
package net.www.httpd;
import java.io.*;
import net.www.html.URL;
/**
* A class to measure the transaction performance of an http server.
* @author James Gosling
*/
class TransPerf implements Runnable {
int ntrans;
long totbytes;
long totmillis;
long totconnmillis;
int stime;
String protocol = "http";
String host = "tachyon.eng";
String port = "";
String ufile = "files.list";
String uprefix;
String urls[] = new String[10];
int nurls;
int nproc = 20;
synchronized void addSample(int nbytes, int nmillis, int cmillis) {
totbytes += nbytes;
ntrans += 1;
totmillis += nmillis;
totconnmillis += cmillis;
}
synchronized void clearStats() {
ntrans = 0;
totbytes = 0;
totmillis = 0;
totconnmillis = 0;
stime = System.nowMillis();
}
synchronized void printStats(PrintStream out) {
int etime = System.nowMillis();
out.print("Results for "+uprefix+" "+nproc+" threads\n");
out.print(ntrans + "\ttotal transactions\n");
out.print(totbytes / (1024. * 1024) + "\tMb transferred\n");
out.print((etime - stime) / 1000 + "\tseconds elapsed\n");
out.print((ntrans * 1000.) / (etime - stime) + "\ttransactions/second\n");
out.print(totbytes / ((double) (etime - stime)) + "\tKb/second\n");
out.print(totconnmillis / ntrans + "\taverage msec to first byte\n");
}
void doTransaction(String uname, byte inbuf[]) {
URL u = new URL(null, uname);
int T0 = System.nowMillis();
InputStream in = u.openStream();
int T1 = System.nowMillis();
int nbytes = 0;
int n = 0;
while ((n = in.read(inbuf, 0, inbuf.length)) >= 0)
nbytes += n;
in.close();
int T2 = System.nowMillis();
addSample(nbytes, T2 - T0, T1 - T0);
}
public void run() {
byte inbuf[] = new byte[8 * 1024];
while (true) {
try {
doTransaction(uprefix + urls[(int) (Math.random() * nurls)], inbuf);
} catch(Exception e) {
e.printStackTrace();
}
}
}
void runTest(String argv[]) {
double t = 0.5;
for (int i = 0; i < argv.length; i++) {
String s = argv[i];
try {
if (s.equals("-t"))
t = Double.valueOf(argv[++i]).doubleValue();
else if (s.equals("-n"))
nproc = Integer.parseInt(argv[++i]);
else if (s.equals("-protocol"))
protocol = argv[++i];
else if (s.equals("-h"))
host = argv[++i];
else if (s.equals("-p"))
port = ":" + argv[++i];
else if (s.equals("-f"))
ufile = ":" + argv[++i];
else {
System.out.print("Illegal argument: " + s + "\n");
return;
}
} catch(Exception e) {
System.out.print("Error in argument: " + s + "\n");
return;
}
}
uprefix = protocol + "://" + host + port;
try {
InputStream in = new FileInputStream(ufile);
StreamTokenizer st = new StreamTokenizer(new BufferedInputStream(in));
st.resetSyntax();
st.wordChars(0, 0377);
st.whitespaceChars(0, ' ');
st.quoteChar('"');
st.quoteChar('\'');
while (st.nextToken() != StreamTokenizer.TT_EOF)
if (st.sval != null) {
if (nurls >= urls.length) {
String nu[] = new String[nurls * 2];
System.arraycopy(urls, 0, nu, 0, urls.length);
urls = nu;
}
urls[nurls++] = st.sval.charAt(0) == '/' ? st.sval : "/" + st.sval;
}
in.close();
} catch(Exception e) {
System.out.print("Error reading file list: " + ufile + "\n");
System.exit(-1);
}
clearStats();
for (int i = nproc; --i >= 0;)
new Thread(this).start();
Thread.sleep((int) (60000 * t));
printStats(System.out);
}
public static void main(String argv[]) {
new TransPerf ().runTest(argv);
System.exit(0);
}
}