⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverstress.java

📁 很棒的web服务器源代码
💻 JAVA
字号:
// ServerStress.java// $Id: ServerStress.java,v 1.3 2000/08/16 21:37:48 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.tests ;import java.net.URL;import java.net.URLConnection;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.FileInputStream;import java.io.FilterInputStream;import java.io.InputStream;import java.io.PrintStream;import java.util.Vector;import org.w3c.tools.timers.EventHandler;import org.w3c.tools.timers.EventManager;class URLStat {    URL  url    = null ;    long time   = 0 ;    int  count  = 0 ;    int  size   = 0 ;    int  failed = 0 ;    public synchronized void update(int size, long time) {	if ((this.size == 0) && (size > 0)) {	    this.size = size ;	    this.time = time ;	} else if ( this.size != size ) {	    failed++ ;	} else {	    this.time += time ;	    this.count++ ;	}    }    public synchronized void display(PrintStream out) {	out.println(url.toExternalForm()		    + ": s=" + size		    + " t=" + (((double) time/1000.0) / ((double) count))		    + " f=" + failed		    + " t=" + time		    + " c=" + count) ;    }    public URL getURL() {	return url;    }    URLStat(URL url) {	this.url   = url ;	this.time  = 0 ;	this.count = 0 ;    }	}class URLGetter extends Thread {    Stresser s = null ;    /**     * Keep picking an URL until the stresser tells us to stop.     * Each time a full URL has been fetched, notify the stresser, and try     * continuing.     */    public void run() {	URLStat u = null ;	try {	    while ((u = s.pickURL()) != null) {		int  got      = 0 ;		int  size     = 0 ;		byte buffer[] = new byte[8192] ;				long tstart = System.currentTimeMillis() ;		try {		    URLConnection conn = u.getURL().openConnection() ;		    InputStream   in   = conn.getInputStream() ;		    while ((got = in.read(buffer)) > 0) 			size += got ;		    in.close() ;		} catch (Exception ex) {		    size = -1 ;		}		s.notifyDone(u, size, System.currentTimeMillis() - tstart) ;	    }	} catch (Exception ex) {	}	s.notifyEnd(this) ;    }    URLGetter(Stresser s) {	this.s = s ;    }}class Stresser extends Thread implements EventHandler {    private final boolean debug = false ;    long      duration  = -1 ;    int       parallel  = 10 ;    Vector    stats     = null ;    URLGetter getters[] = null ;    boolean   done      = false ;    EventManager manager = null ;    /**     * Statistics     */    public long total_request = 0 ;    public long total_time    = 0 ;    public synchronized void handleTimerEvent(Object data, long time) {	if ( debug )	    System.out.println("shuting down...") ;	done = true ;    }    public synchronized void notifyDone(URLStat u, int size, long time) {	u.update(size, time) ;	total_request++ ;    }    public synchronized void notifyEnd(URLGetter getter) {	parallel-- ;	notifyAll() ;    }    public int url_counter = 0 ;    public synchronized URLStat pickURL() {	if ( done )	    return null ;	url_counter = (url_counter + 1) % stats.size() ;	return (URLStat) stats.elementAt(url_counter) ;    }    public synchronized void waitForCompletion() {	while ( parallel != 0 ) {	    try {		wait() ;	    } catch (InterruptedException ex) {	    }	    if ( debug )		System.out.println("waiting for "+parallel+" getters.");	}    }    /**     * Start all URL getters, until the duration has expired.     */    public void run() {	long tstart = System.currentTimeMillis() ;	// Start all getters:	for (int i = 0 ; i < parallel ; i++) 	    getters[i].start() ;	// Wait for termination:	waitForCompletion() ;	// Display results:	long tend = System.currentTimeMillis() ;	System.out.println("Total request: "+total_request) ;	System.out.println("Total time   : "+(tend-tstart)) ;	System.out.println("Req/sec      : "			   +(((double)total_request)/((double)(tend-tstart)))*1000);	System.out.println("detailed results:") ;	for (int i = 0 ; i < stats.size() ; i++) {	    ((URLStat) stats.elementAt(i)).display(System.out) ;	}    }    Stresser(Vector urls, long duration, int parallel) {	// Initialize instance vars:	this.duration = duration ;	this.parallel = parallel ;	// Create the getters:	this.getters  = new URLGetter[parallel] ;	for (int i = 0 ; i < parallel ; i++) 	    getters[i] = new URLGetter(this) ;	// Create the url stat objects:	this.stats = new Vector(urls.size()) ;	for (int i = 0 ; i < urls.size() ; i++) 	    stats.addElement(new URLStat((URL) urls.elementAt(i))) ;	// Create an event manager, and register for event at end of duration	this.manager  = new EventManager();	this.manager.setDaemon(true) ;	this.manager.start() ;	this.manager.registerTimer(duration, this, null) ;    }}/** * Stress a web server for a given duration of time. * This program will run a constant rate of requests to a given server,  * for a given duration of time.  * <p><b>This test results should be taken with care</b>: they depend on a  * number of things, and usually run slower then C-written tests. They are * included in Jigsaw release for testing only (not for real benchmarking, * altough you are free to doi whatever you want with the numbers you get). */public class ServerStress {    public static void usage() {	PrintStream o = System.out ;	o.println("usage: ServerStress <options>") ;	o.println("-d duration: duration of test in ms.") ;	o.println("-p parallel: number of parallel requests to run.") ;	o.println("-u url     : add URL to list of url to visit.");	o.println("-f file    : add all URL in file (one per line)") ;	System.exit(1) ;    }    public static void main (String args[]) {	Vector urls = new Vector() ;		// List of urls to visit	long   duration = 60000 ;		// Duration in ms.	int    par      = 10 ;			// # of parallel reqs to run	String filename = null ;	// Parse the command line:	for (int i = 0 ; i < args.length ; i++) {	    if (args[i].equals("-d") && (i+1 < args.length)) {		try {		    duration = Integer.parseInt(args[++i]) ;		} catch (Exception ex) {		    usage() ;		}	    } else if (args[i].equals("-u") && (i+1 < args.length)) {		try {		    urls.addElement(new URL(args[++i])) ;		} catch (Exception ex) {		    usage() ;		}	    } else if (args[i].equals("-p") && (i+1 < args.length)) {		try {		    par = Integer.parseInt(args[++i]) ;		} catch (Exception ex) {		    usage() ;		}	    } else if (args[i].equals("-f") && (i+1 < args.length)) {		filename = args[++i] ;	    } else {		usage() ;	    }	}	// Update URL list with file if needed:	if ( filename != null ) {	    try {		String      line = null ;		DataInputStream in   = (new DataInputStream					(new BufferedInputStream					 (new FileInputStream(filename)))) ;		while ((line = in.readLine()) != null) 		    urls.addElement(new URL(line)) ;		in.close() ;	    } catch (Exception ex) {		System.out.println("Unable to read URL file "+filename) ;		ex.printStackTrace() ;		System.exit(1) ;	    }	}	// Build the stresser:	Stresser s = new Stresser(urls, duration, par) ;	s.start() ;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -