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: [email protected]
For additional commands, e-mail: [email protected]