Author: nextgens
Date: 2007-02-24 14:44:10 +0000 (Sat, 24 Feb 2007)
New Revision: 11904

Modified:
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
Log:
Implement #1166: display memory stats on TCMI

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2007-02-23 
20:30:06 UTC (rev 11903)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2007-02-24 
14:44:10 UTC (rev 11904)
@@ -16,6 +16,7 @@
 import java.net.SocketException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.text.NumberFormat;
 import java.util.HashMap;
 import java.util.Hashtable;

@@ -36,6 +37,7 @@
 import freenet.support.HexUtil;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
+import freenet.support.SizeUtil;
 import freenet.support.api.Bucket;
 import freenet.support.io.ArrayBucket;
 import freenet.support.io.BucketTools;
@@ -170,6 +172,7 @@
 //        sb.append("SUBFILE:<filename> - append all data received from 
subscriptions to a file, rather than sending it to stdout.\r\n");
 //        sb.append("SAY:<text> - send text to the last created/pushed 
stream\r\n");
         sb.append("STATUS - display some status information on the node 
including its reference and connections.\r\n");
+        sb.append("MEMSTAT - display some memory usage related 
informations.\r\n");
         sb.append("SHUTDOWN - exit the program\r\n");
         if(n.isUsingWrapper())
                sb.append("RESTART - restart the program\r\n");
@@ -368,6 +371,36 @@
                out.write(sb.toString().getBytes());
                out.flush();
                return true;
+        } else if(uline.startsWith("MEMSTAT")) {
+               Runtime rt = Runtime.getRuntime();
+               float freeMemory = (float) rt.freeMemory();
+               float totalMemory = (float) rt.totalMemory();
+               float maxMemory = (float) rt.maxMemory();
+
+               long usedJavaMem = (long)(totalMemory - freeMemory);
+               long allocatedJavaMem = (long)totalMemory;
+               long maxJavaMem = (long)maxMemory;
+               int availableCpus = rt.availableProcessors();
+               NumberFormat thousendPoint = NumberFormat.getInstance();
+
+               ThreadGroup tg = Thread.currentThread().getThreadGroup();
+               while(tg.getParent() != null) tg = tg.getParent();
+               int threadCount = tg.activeCount();
+
+               StringBuffer sb = new StringBuffer();
+               sb.append("Used Java memory:\u00a0" + 
SizeUtil.formatSize(usedJavaMem, true)+"\r\n");
+               sb.append("Allocated Java memory:\u00a0" + 
SizeUtil.formatSize(allocatedJavaMem, true)+"\r\n");
+               sb.append("Maximum Java memory:\u00a0" + 
SizeUtil.formatSize(maxJavaMem, true)+"\r\n");
+               sb.append("Running threads:\u00a0" + 
thousendPoint.format(threadCount)+"\r\n");
+               sb.append("Available CPUs:\u00a0" + availableCpus+"\r\n");
+               sb.append("JVM Vendor:\u00a0" + 
System.getProperty("java.vm.vendor")+"\r\n");
+               sb.append("JVM Version:\u00a0" + 
System.getProperty("java.vm.version")+"\r\n");
+               sb.append("OS Name:\u00a0" + 
System.getProperty("os.name")+"\r\n");
+               sb.append("OS Version:\u00a0" + 
System.getProperty("os.version")+"\r\n");
+               sb.append("OS Architecture:\u00a0" + 
System.getProperty("os.arch")+"\r\n");
+               out.write(sb.toString().getBytes());
+               out.flush();
+               return false;
        } else if(uline.startsWith("HELP")) {
                printHeader(out);
                outsb.append("\r\n");


Reply via email to