commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bur...@apache.org
Subject svn commit: r156391 - in jakarta/commons/sandbox/benchmark/trunk: ./ src/java/org/apache/commons/benchmark/ src/java/org/apache/commons/benchmark/xmlrpc/ src/test/org/apache/commons/benchmark/ xdocs/
Date Mon, 07 Mar 2005 04:44:40 GMT
Author: burton
Date: Sun Mar  6 20:44:38 2005
New Revision: 156391

URL: http://svn.apache.org/viewcvs?view=rev&rev=156391
Log:
refactored to store individual metadata into a class

Added:
    jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkMeta.java
Modified:
    jakarta/commons/sandbox/benchmark/trunk/project.xml
    jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/Benchmark.java
    jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkTracker.java
    jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/xmlrpc/BenchmarkHandler.java
    jakarta/commons/sandbox/benchmark/trunk/src/test/org/apache/commons/benchmark/Test1.java
    jakarta/commons/sandbox/benchmark/trunk/xdocs/index.xml

Modified: jakarta/commons/sandbox/benchmark/trunk/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/project.xml?view=diff&r1=156390&r2=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/project.xml (original)
+++ jakarta/commons/sandbox/benchmark/trunk/project.xml Sun Mar  6 20:44:38 2005
@@ -15,7 +15,7 @@
 
     <description>Jakarta Benchmark</description>
 
-    <currentVersion>0.0.2</currentVersion>
+    <currentVersion>0.0.3</currentVersion>
 
     <package>org.apache.commons.benchmark</package>
 
@@ -55,6 +55,13 @@
     </contributors>
     
     <dependencies>
+
+        <dependency>
+            <id>commons-beanutils</id>
+            <version>1.7.0</version>
+        </dependency>
+
+        <dependency><id>jrobin</id><version>1.4.0</version></dependency>
 
         <!-- these two are required by maven -->
         <dependency><id>xml-apis</id><version>2.0.2</version></dependency>

Modified: jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/Benchmark.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/Benchmark.java?view=diff&r1=156390&r2=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/Benchmark.java
(original)
+++ jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/Benchmark.java
Sun Mar  6 20:44:38 2005
@@ -144,22 +144,6 @@
     // **** metadata about this benchmark ***************************************
 
     /**
-     * The total number of start()ed benchmarks since in the last rollover.
-     * @deprecated
-     */
-    public long getTotalStarted() {
-        return tracker1.lastStarted;
-    }
-
-    /**
-     * The total number of complete()ed benchmarks since in the last rollover.
-     * @deprecated
-     */
-    public long getTotalCompleted() {
-        return tracker1.lastCompleted;
-    }
-
-    /**
      * Get the tracker for this benchmark which includes all metadata related to
      * this benchmark including total completed/started and current values.
      *
@@ -313,63 +297,23 @@
         return "1min: " +
             "now=("  +
             "started:" +
-            getTracker1().getStarted() +
+            getTracker1().now.getStarted() +
             "," +
             "completed:" +
-            getTracker1().getCompleted() +
+            getTracker1().now.getCompleted() +
             "," +
             "duration:" +
-            getTracker1().getDuration() +
+            getTracker1().now.getDuration() +
             ")" + 
             " " +
             "last=("  +
             "started:" +
-            getTracker1().getLastStarted() +
+            getTracker1().last.getStarted() +
             "," +
             "completed:" +
-            getTracker1().getLastCompleted() +
+            getTracker1().last.getCompleted() +
             ")";
             
-    }
-    
-    // **** test code ***********************************************************
-
-    /**
-     * Quick benchmark code testing.
-     */
-    public static void main( String[] args ) throws Exception {
-
-        //FIXME: we should also support benchmarking of code regions and whether
-        //we're IN a code region.  That would be interesting to.  Have a bunch
-        //of start() complete() methods and then I could benchmark how many are
-        //open at a given time.
-        //
-        // This would support total number of completed operations and total
-        // number of pending operations within a given timeframe.
-
-        //simple testing framework
-
-        INTERVAL_1 = 10 * 1000;
-
-        Benchmark benchmark = getBenchmark( Benchmark.class );
-        benchmark = benchmark.child( "main" );
-
-        System.out.println( "name: " + benchmark.getName() );
-        
-        for ( int i = 0; i < 60; ++i ) {
-
-            benchmark.start();
-
-            //do something slow...
-            Thread.sleep( INTERVAL_1 + 10 );
-
-            benchmark.complete();
-
-            System.out.println( "started: " + benchmark.getTotalStarted() );
-            System.out.println( "completed: " + benchmark.getTotalCompleted() );
-
-        }
-
     }
 
 }

Added: jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkMeta.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkMeta.java?view=auto&rev=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkMeta.java
(added)
+++ jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkMeta.java
Sun Mar  6 20:44:38 2005
@@ -0,0 +1,79 @@
+/*
+ * Copyright 1999,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.benchmark;
+
+/**
+ * 
+ * @author <a href="mailto:burton@rojo.com">Kevin Burton</a>
+ * @version $Id: Benchmark.java,v 1.3 2005/02/16 02:28:09 burton Exp $
+ */
+public class BenchmarkMeta {
+
+    public long timestamp = -1;
+
+    public long started = 0;
+
+    public long completed = 0;
+
+    public long duration = 0;
+
+    /**
+     * The time the current benchmark was started.  -1 for never started.
+     */
+    public long getTimestamp() {
+        return timestamp;
+    }
+    
+    /**
+     * The current number of "started" benchmarks.  This can be analyzed at
+     * runtime but its recommended that you use lastCompleted, lastStarted
+     */
+    public long getStarted() {
+        return started;
+    }
+
+    /**
+     * The current number of "completed" benchmarks.  This can be analyzed at
+     * runtime but its recommended that you use lastCompleted, lastStarted
+     */
+    public long getCompleted() {
+        return completed;
+    }
+
+    /**
+     * The total amount of time (in milliseconds) that threads have spent
+     * between start() and complete() methods.  Note that mean duration can be
+     * computed by duration / completed.
+     */
+    public long getDuration() {
+        return duration;
+    }
+
+    /**
+     * Total mean duration.
+     */
+    public long getMeanDuration() {
+        return duration > 0 ? duration / completed : 0;
+    }
+
+    public void reset() {
+        started = 0;
+        completed = 0;
+        duration = 0;
+    }
+    
+}

Modified: jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkTracker.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkTracker.java?view=diff&r1=156390&r2=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkTracker.java
(original)
+++ jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/BenchmarkTracker.java
Sun Mar  6 20:44:38 2005
@@ -45,46 +45,15 @@
      */
     private int interval = 0;
     
-    /**
-     * The time the current benchmark was started.  -1 for never started.
-     */
-    public long timestamp = -1;
-
-    /**
-     * The current number of "started" benchmarks.  This can be analyzed at
-     * runtime but its recommended that you use lastCompleted, lastStarted
-     */
-    public long started = 0;
-
-    /**
-     * The current number of "completed" benchmarks.  This can be analyzed at
-     * runtime but its recommended that you use lastCompleted, lastStarted
-     */
-    public long completed = 0;
-
-    /**
-     * The total amount of time (in milliseconds) that threads have spent
-     * between start() and complete() methods.  Note that mean duration can be
-     * computed by duration / completed.
-     */
-    public long duration = 0;
-    
     // **** Last variables after the rollover ***********************************
 
     /**
-     * Value getTotalStarted
-     */
-    public long lastStarted = 0;
-
-    /**
-     * Value getTotalCompleted
-     */
-    public long lastCompleted = 0;
-
-    /**
      * Keep track of duration.
      */
     private static BenchmarkThreadLocal threadlocal = new BenchmarkThreadLocal();
+
+    BenchmarkMeta now = new BenchmarkMeta();
+    BenchmarkMeta last = new BenchmarkMeta();
     
     /**
      * 
@@ -95,24 +64,23 @@
         this.parent = parent;
     }
 
-    BenchmarkTracker reset( long now ) {
+    BenchmarkTracker reset( long currentTimeMillis ) {
 
         //need to perform a swap and save the current benchmark.
-
-        lastStarted = started;
-        lastCompleted = completed;
+        last = now;
 
         //if we've slept for too long we have to start fresh
-        if ( now - timestamp > interval ) {
-            lastStarted = 0;
-            lastCompleted = 0;
+        if ( currentTimeMillis - last.timestamp > interval ) {
+            last.reset();
         } 
 
-        //reset the benchmark
-        timestamp = now;
-        started = 0;
-        completed = 0;
-
+        //reset the benchmark (note.  We could probably save a bit of GC here by
+        //swapping the last and now values since the last would just be
+        //discarded anyway.
+        now = new BenchmarkMeta();
+        now.timestamp = currentTimeMillis;
+        now.reset();
+        
         return this;
 
     }
@@ -122,11 +90,11 @@
      */
     BenchmarkTracker resetWhenNecessary() {
 
-        long now = System.currentTimeMillis();
+        long currentTimeMillis = System.currentTimeMillis();
 
-        if ( now - timestamp > interval ) {
+        if ( currentTimeMillis - now.timestamp > interval ) {
             
-            reset( now );
+            reset( currentTimeMillis );
             
         }
 
@@ -146,7 +114,7 @@
         synchronized( MUTEX ) {
 
             resetWhenNecessary();
-            ++started;
+            ++now.started;
 
             doLocalStart();
 
@@ -162,7 +130,7 @@
         synchronized( MUTEX ) {
 
             resetWhenNecessary();
-            ++completed;
+            ++now.completed;
 
             doLocalCompleted();
             
@@ -190,7 +158,7 @@
         
         closure.completedTimeMillis = System.currentTimeMillis();
 
-        duration += closure.completedTimeMillis - closure.startedTimeMillis;
+        now.duration += closure.completedTimeMillis - closure.startedTimeMillis;
         
     }
 
@@ -203,52 +171,14 @@
     
     // **** metadata ************************************************************
 
-    /**
-     * The total number of start()ed benchmarks since in the last rollover.
-     * @deprecated
-     */
-    public long getTotalStarted() {
-        return lastStarted;
-    }
-
-    /**
-     * The total number of complete()ed benchmarks since in the last rollover.
-     * @deprecated
-     */
-    public long getTotalCompleted() {
-        return lastCompleted;
-    }
-
-    public long getLastCompleted() {
-        return lastCompleted;
-    }
-
-    public long getLastStarted() {
-        return lastStarted;
-    }
-
-    /**
-     */
-    public long getStarted() {
-        return started;
+    public BenchmarkMeta getLast() {
+        return last;
     }
 
-    /**
-     */
-    public long getCompleted() {
-        return completed;
+    public BenchmarkMeta getNow() {
+        return now;
     }
 
-    public long getDuration() {
-        return duration;
-    }
-
-    public long getMeanDuration() {
-
-        return duration > 0 ? duration / completed : 0;
-
-    }
-    
 }
 
 /**

Modified: jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/xmlrpc/BenchmarkHandler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/xmlrpc/BenchmarkHandler.java?view=diff&r1=156390&r2=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/xmlrpc/BenchmarkHandler.java
(original)
+++ jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/xmlrpc/BenchmarkHandler.java
Sun Mar  6 20:44:38 2005
@@ -30,23 +30,15 @@
  */
 public class BenchmarkHandler {
     
-    public Double getTotalStarted( String name ) {
-        return new Double( Benchmark.getBenchmark( name ).getTotalStarted() );
-    }
-
-    public Double getTotalCompleted( String name ) {
-        return new Double( Benchmark.getBenchmark( name ).getTotalCompleted() );
-    }
-
-    public Double getTotalStarted( String name, int interval ) {
+    public Double getLastStarted( String name, int interval ) {
 
         return new Double( Benchmark.getBenchmark( name )
-                               .getTracker1().getTotalStarted() );
+                           .getTracker1().getLast().getStarted() );
     }
 
-    public Double getTotalCompleted( String name, int interval ) {
+    public Double getLastCompleted( String name, int interval ) {
         return new Double( Benchmark.getBenchmark( name )
-                               .getTracker1().getTotalCompleted() );
+                           .getTracker1().getLast().getCompleted() );
     }
 
 }

Modified: jakarta/commons/sandbox/benchmark/trunk/src/test/org/apache/commons/benchmark/Test1.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/src/test/org/apache/commons/benchmark/Test1.java?view=diff&r1=156390&r2=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/src/test/org/apache/commons/benchmark/Test1.java
(original)
+++ jakarta/commons/sandbox/benchmark/trunk/src/test/org/apache/commons/benchmark/Test1.java
Sun Mar  6 20:44:38 2005
@@ -45,8 +45,8 @@
         Thread.sleep( 100 );
         benchmark.complete();
 
-        long duration = benchmark.getTracker1().getDuration();
-        long meanDuration = benchmark.getTracker1().getMeanDuration();
+        long duration = benchmark.getTracker1().now.duration;
+        long meanDuration = benchmark.getTracker1().now.getMeanDuration();
 
         System.out.println( "duration: " + duration );
         System.out.println( "meanDuration: " + meanDuration );
@@ -86,8 +86,10 @@
         Thread.sleep( 1000 );
         Thread.sleep( 1000 );
 
-        assertEquals( 0, benchmark.getTracker1().getStarted() );
-        assertEquals( 0, benchmark.getTracker1().getLastStarted() );
+        assertEquals( 0, benchmark.getTracker1().last.getStarted() );
+        assertEquals( 0, benchmark.getTracker1().last.getStarted() );
+        assertEquals( 0, benchmark.getTracker1().now.getCompleted() );
+        assertEquals( 0, benchmark.getTracker1().now.getDuration() );
 
         benchmark.reset();
         
@@ -105,7 +107,7 @@
         Benchmark benchmark = Benchmark.getBenchmark( "java.util.List.iterator" );
         assertNotNull( benchmark );
 
-        System.out.println( Benchmark.getBenchmarks() );
+        System.out.println( benchmark.getName() + ": " + benchmark );
         
     }
 
@@ -123,8 +125,8 @@
 
         System.out.println( "Not null! " );
 
-        assertEquals( 1, benchmark.getTracker1().getStarted() );
-        assertEquals( 1, benchmark.getTracker1().getCompleted() );
+        assertEquals( 1, benchmark.getTracker1().now.started );
+        assertEquals( 1, benchmark.getTracker1().now.completed );
 
         System.out.println( Benchmark.getBenchmarks() );
 
@@ -144,18 +146,18 @@
         benchmark.start();
         benchmark.complete();
 
-        assertEquals( 1, benchmark.getTracker1().getStarted() );
-        assertEquals( 1, benchmark.getTracker1().getCompleted() );
+        assertEquals( 1, benchmark.getTracker1().now.getStarted() );
+        assertEquals( 1, benchmark.getTracker1().now.getCompleted() );
 
-        assertEquals( 1, benchmark.getTracker5().getStarted() );
-        assertEquals( 1, benchmark.getTracker15().getCompleted() );
+        assertEquals( 1, benchmark.getTracker5().now.getStarted() );
+        assertEquals( 1, benchmark.getTracker15().now.getCompleted() );
 
         Thread.sleep( 1000 );
 
-        assertEquals( 0, benchmark.getTracker1().getStarted() );
+        assertEquals( 0, benchmark.getTracker1().now.started );
 
         Thread.sleep( 5000 );
-        assertEquals( 0, benchmark.getTracker5().getStarted() );
+        assertEquals( 0, benchmark.getTracker5().now.started );
 
         //reset all the trackers
         benchmark.reset();
@@ -177,22 +179,22 @@
 
             benchmark.start();
 
-            assertEquals( benchmark.getTracker().getStarted(), i+1 );
+            assertEquals( benchmark.getTracker().now.getStarted(), i+1 );
             
             benchmark.complete();
 
-            assertEquals( benchmark.getTracker().getCompleted(), i+1 );
+            assertEquals( benchmark.getTracker().now.getCompleted(), i+1 );
 
         }
 
         //now call the tracker to force a reset
         benchmark.getTracker().reset( System.currentTimeMillis() );
 
-        assertEquals( benchmark.getTracker().getTotalStarted(), total );
-        assertEquals( benchmark.getTracker().getTotalCompleted(), total );
+        assertEquals( benchmark.getTracker1().getNow().getStarted(), 0 );
+        assertEquals( benchmark.getTracker1().getNow().getCompleted(), 0 );
 
-        assertEquals( benchmark.getTracker().getStarted(), 0 );
-        assertEquals( benchmark.getTracker().getCompleted(), 0 );
+        assertEquals( benchmark.getTracker1().getLast().getStarted(), total );
+        assertEquals( benchmark.getTracker1().getLast().getCompleted(), total );
 
     }
     

Modified: jakarta/commons/sandbox/benchmark/trunk/xdocs/index.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/xdocs/index.xml?view=diff&r1=156390&r2=156391
==============================================================================
--- jakarta/commons/sandbox/benchmark/trunk/xdocs/index.xml (original)
+++ jakarta/commons/sandbox/benchmark/trunk/xdocs/index.xml Sun Mar  6 20:44:38 2005
@@ -8,6 +8,45 @@
 
     <body>
 
+        <section name="Goals">
+            
+            <p>
+                Java (and UNIX) has for a long time lacked the equivalent (for
+                the most part) of Windows perfmon.  While perfmon was by no
+                means perfect the goals were admirable.  Developers could export
+                simple statistics from their application and perfmon could
+                introspect the values and graph them.
+            </p>
+
+            <p>
+                With commons benchmark we provide similar functionality by
+                allowing developers to export statistics and then tool
+                developers can write frontends to monitor application
+                performance.
+            </p>
+            
+            <p>
+                Infrasture code such as rrdtool, ganglia, and jrobin, provide
+                the foundation to view the data and commons benchmarks provides
+                a way to get at the data.
+            </p>
+
+            <p>
+                Therefore we provide two core components for runtime performance
+                analysis of Java applications:
+
+                <ol>
+
+                    <li>A simple benchmark API for Java</li>
+
+                    <li>An XMLRPC export mechanism</li>
+                    
+                    <li>A graphing package based on JRobin</li>
+
+                </ol>
+
+        </section>
+
         <section name="Benchmark">
 
             <p>
@@ -20,7 +59,7 @@
   
             <p>
                 This class is lightweight (only requires a hashmap entry, and
-                3x32 bytes per benchmark of storage with no external
+                3x32 bytes per benchmark of storage with no external storage
                 requirements.  This class is also threadsafe so if you need to
                 call this from multithreaded code to benchmark then you'll be
                 ok.
@@ -59,60 +98,85 @@
             </source>
             
             <p>
-              The method overhead is very light. One a modern machine you can
-              perform about 1M benchmarks per second.  For code thats only
-              called a few thousand times you won't notice any performance
-              overhead.
+                The method overhead is very light. One a modern machine you can
+                perform about 1M benchmarks per second.  For code thats only
+                called a few thousand times you won't notice any performance
+                overhead.
             </p>
 
-            <p>
-
         </section>
 
         <section name="Proxy Benchmarks">
 
             <p>
-                We also support so-called proxy benchmarks which can benchmark
+                We also support <q>proxy</q> benchmarks which can benchmark
                 every method of a given class.  The only requirements are that
                 the class be backed by an interface.
             </p>
 
-            <source>
-
-                IFoo foo = new Foo();
+            <p>
+                Here we're going to benchmark java.util.LinkedList:
+            </p>
 
-                foo = (IFoo)Benchmark.getBenchmarkAsProxy( foo, IFoo.class );
+            <source>
 
-                foo.doSomething();
+                List list = new LinkedList();
+                list = (List)Benchmark.getBenchmarkAsProxy( list, List.class );
+                
+                list.add( "hello" );
+                list.add( "world" );
+                list.iterator();
+                
+                Benchmark benchmark = Benchmark.getBenchmark( "java.util.List.iterator" );
 
-                Benchmark benchmark = Benchmark.getBenchmark( "org.apache.commons.benchmark.IFoo.doSomething"
);
+                System.out.println( benchmark.getName() + ": " + benchmark );
 
             </source>
 
         </section>
 
-        <section name="Goals">
+        <section name="Graphing">
+            
+            <p>
+                We provide integration automated graph output for benchmark
+                stats.  Initially this is provided via integration with JRobin
+                which used Round Robin Database (RRD) files to maintain
+                historical data.
+            </p>
 
-          <p>
-            Java (and UNIX) has for a long time lacked the equivalent (for
-            the most part) of Windows perfmon.  While perfmon was by no
-            means perfect the goals were admirable.  Developers could export
-            simple statistics from their application and perfmon could
-            introspect the values and graph them.
-          </p>
-
-          <p>
-            With commons benchmark we can provide similar functionality by
-            allowing developers to export statistics and then tool
-            developers can write frontends to monitor application
-            performance.
-          </p>
-
-          <p>
-            Infrasturre code such as rrdtool, ganglia, and jrobin, provide
-            the foundation to view the data and commons benchmarks provides
-            a way to get at the data.
-          </p>
+            <p>
+                You can define your datasources with a benchmark.xml
+                configuration file and a daemon will periodically (usually once
+                per minute) connect to a running VM via XMLRPC (or in-process)
+                and log a benchmark stat to an RRD file.
+            </p>
+
+            <source>
+
+                ----------------------------------------------------
+                | Target VM using benchmark.start/complete() calls |
+                ----------------------------------------------------
+                                        ^
+                                        |
+                
+                         --------------------------------
+                         | Source VM running RRD logger |
+                         --------------------------------
+                                        |
+                                        V
+                
+                         --------------------------------
+                         |  WWW server exporting graphs |
+                         --------------------------------
+
+            </source>
+
+            <p>
+                The XMLRPC daemon can also be integrated with
+                <a href="http://ganglia.info">ganglia</a> with the ganglia
+                gmetric script.  Slight configuration is required in order to
+                specify the multicast channel, port, cluster name, ec.
+            </p>
 
         </section>
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message