Author: kkolinko
Date: Tue Nov 13 22:58:01 2012
New Revision: 1409014

URL: http://svn.apache.org/viewvc?rev=1409014&view=rev
Log:
Merged revision 1409007 from tomcat/trunk:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54143
Add display of memory pools usage (including PermGen) to the Status page of the 
Manager web application.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
    tomcat/tc7.0.x/trunk/webapps/manager/xform.xsl

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1409007

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java?rev=1409014&r1=1409013&r2=1409014&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java 
Tue Nov 13 22:58:01 2012
@@ -19,12 +19,17 @@
 package org.apache.catalina.manager;
 
 import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryPoolMXBean;
+import java.lang.management.MemoryUsage;
 import java.lang.reflect.Method;
 import java.text.MessageFormat;
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
 import java.util.Vector;
 
 import javax.management.MBeanServer;
@@ -200,6 +205,13 @@ public class StatusTransformer {
     public static void writeVMState(PrintWriter writer, int mode)
         throws Exception {
 
+        SortedMap<String, MemoryPoolMXBean> memoryPoolMBeans =
+                new TreeMap<String, MemoryPoolMXBean>();
+        for (MemoryPoolMXBean mbean: ManagementFactory.getMemoryPoolMXBeans()) 
{
+            String sortKey = mbean.getType() + ":" + mbean.getName();
+            memoryPoolMBeans.put(sortKey, mbean);
+        }
+
         if (mode == 0){
             writer.print("<h1>JVM</h1>");
 
@@ -214,6 +226,29 @@ public class StatusTransformer {
             writer.print(formatSize(
                     Long.valueOf(Runtime.getRuntime().maxMemory()), true));
             writer.print("</p>");
+
+            writer.write("<table border=\"0\"><thead><tr><th>Memory 
Pool</th><th>Type</th><th>Initial</th><th>Total</th><th>Maximum</th><th>Used</th></tr></thead><tbody>");
+            for (MemoryPoolMXBean memoryPoolMBean : memoryPoolMBeans.values()) 
{
+                MemoryUsage usage = memoryPoolMBean.getUsage();
+                writer.write("<tr><td>");
+                writer.print(memoryPoolMBean.getName());
+                writer.write("</td><td>");
+                writer.print(memoryPoolMBean.getType());
+                writer.write("</td><td>");
+                writer.print(formatSize(Long.valueOf(usage.getInit()), true));
+                writer.write("</td><td>");
+                writer.print(formatSize(Long.valueOf(usage.getCommitted()), 
true));
+                writer.write("</td><td>");
+                writer.print(formatSize(Long.valueOf(usage.getMax()), true));
+                writer.write("</td><td>");
+                writer.print(formatSize(Long.valueOf(usage.getUsed()), true));
+                if (usage.getMax() > 0) {
+                    writer.write(" ("
+                            + (usage.getUsed() * 100 / usage.getMax()) + "%)");
+                }
+                writer.write("</td></tr>");
+            }
+            writer.write("</tbody></table>");
         } else if (mode == 1){
             writer.write("<jvm>");
 
@@ -222,6 +257,17 @@ public class StatusTransformer {
             writer.write(" total='" + Runtime.getRuntime().totalMemory() + 
"'");
             writer.write(" max='" + Runtime.getRuntime().maxMemory() + "'/>");
 
+            for (MemoryPoolMXBean memoryPoolMBean : memoryPoolMBeans.values()) 
{
+                MemoryUsage usage = memoryPoolMBean.getUsage();
+                writer.write("<memorypool");
+                writer.write(" name='" + memoryPoolMBean.getName() + "'");
+                writer.write(" type='" + memoryPoolMBean.getType() + "'");
+                writer.write(" usageInit='" + usage.getInit() + "'");
+                writer.write(" usageCommitted='" + usage.getCommitted() + "'");
+                writer.write(" usageMax='" + usage.getMax() + "'");
+                writer.write(" usageUsed='" + usage.getInit() + "'/>");
+            }
+
             writer.write("</jvm>");
         }
 

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1409014&r1=1409013&r2=1409014&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Nov 13 22:58:01 2012
@@ -224,6 +224,14 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name="Web applications">
+    <changelog>
+      <add>
+        <bug>54143</bug>: Add display of the memory pools usage (including
+        PermGen) to the Status page of the Manager web application. (kkolinko)
+      </add>
+    </changelog>
+  </subsection>
   <subsection name="Tribes">
     <changelog>
       <fix>

Modified: tomcat/tc7.0.x/trunk/webapps/manager/xform.xsl
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/manager/xform.xsl?rev=1409014&r1=1409013&r2=1409014&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/manager/xform.xsl (original)
+++ tomcat/tc7.0.x/trunk/webapps/manager/xform.xsl Tue Nov 13 22:58:01 2012
@@ -44,6 +44,9 @@
 
   <xsl:template match="jvm">
    <xsl:apply-templates select="memory"/>
+   <b>Memory Pools</b><br />
+   <xsl:apply-templates select="memorypool"/>
+   <hr />
   </xsl:template>
 
   <xsl:template match="memory">
@@ -56,6 +59,18 @@
     </table><hr />
   </xsl:template>
 
+  <xsl:template match="memorypool">
+    <table><tr>
+             <td><b>Name:</b> <xsl:value-of select="@name"/></td>
+             <td><b>Type:</b> <xsl:value-of select="@type"/></td>
+             <td><b>Initial:</b> <xsl:value-of select="@usageInit"/></td>
+             <td><b>Committed:</b> <xsl:value-of 
select="@usageCommitted"/></td>
+             <td><b>Maximum:</b> <xsl:value-of select="@usageMax"/></td>
+             <td><b>Used:</b> <xsl:value-of select="@usageUsed"/></td>
+           </tr>
+    </table>
+  </xsl:template>
+
   <xsl:template match="connector">
      <b>Connector -- </b> <xsl:value-of select="@name"/><br />
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to