Author: kkolinko
Date: Mon Dec  8 07:21:03 2014
New Revision: 1643750

URL: http://svn.apache.org/r1643750
Log:
Fix http://issues.apache.org/bugzilla/show_bug.cgi?id=57261
Backport Diagnostics class, /vminfo and /threaddump command in Manager 
application and their Ant tasks from Tomcat 8.
Update documentation.

Added:
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/ThreaddumpTask.java
      - copied unchanged from r1643738, 
tomcat/tc8.0.x/trunk/java/org/apache/catalina/ant/ThreaddumpTask.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/VminfoTask.java
      - copied unchanged from r1643738, 
tomcat/tc8.0.x/trunk/java/org/apache/catalina/ant/VminfoTask.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java
      - copied, changed from r1643738, 
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/LocalStrings.properties
      - copied unchanged from r1643738, 
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/util/LocalStrings.properties
Modified:
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/antlib.xml
    
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
    tomcat/tc7.0.x/trunk/webapps/docs/manager-howto.xml

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/antlib.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/antlib.xml?rev=1643750&r1=1643749&r2=1643750&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/antlib.xml (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ant/antlib.xml Mon Dec  8 
07:21:03 2014
@@ -44,6 +44,12 @@
   <typedef
         name="findleaks"
         classname="org.apache.catalina.ant.FindLeaksTask" />  
+  <typedef
+        name="vminfo"
+        classname="org.apache.catalina.ant.VminfoTask" />
+  <typedef
+        name="threaddump"
+        classname="org.apache.catalina.ant.ThreaddumpTask" />
   <!-- Jk Task -->
   <typedef
         name="jkstatus"

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties?rev=1643750&r1=1643749&r2=1643750&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties 
(original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties 
Mon Dec  8 07:21:03 2014
@@ -115,10 +115,11 @@ managerServlet.sessions=OK - Session inf
 managerServlet.started=OK - Started application at context path {0}
 managerServlet.startFailed=FAIL - Application at context path {0} could not be 
started
 managerServlet.stopped=OK - Stopped application at context path {0}
+managerServlet.threaddump=OK - JVM thread dump
 managerServlet.undeployed=OK - Undeployed application at context path {0}
 managerServlet.unknownCommand=FAIL - Unknown command {0}
 managerServlet.userDatabaseError=FAIL - Cannot resolve user database reference
 managerServlet.userDatabaseMissing=FAIL - No user database is available
-
+managerServlet.vminfo=OK - VM info
 statusServlet.title=Server Status
 statusServlet.complete=Complete Server Status

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1643750&r1=1643749&r2=1643750&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java 
Mon Dec  8 07:21:03 2014
@@ -56,6 +56,7 @@ import org.apache.catalina.startup.Expan
 import org.apache.catalina.util.ContextName;
 import org.apache.catalina.util.RequestUtil;
 import org.apache.catalina.util.ServerInfo;
+import org.apache.tomcat.util.Diagnostics;
 import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.modeler.Registry;
 import org.apache.tomcat.util.res.StringManager;
@@ -109,6 +110,7 @@ import org.apache.tomcat.util.res.String
  *     context path <code>/xxx</code> for this virtual host.</li>
  * <li><b>/stop?path=/xxx</b> - Stop the web application attached to
  *     context path <code>/xxx</code> for this virtual host.</li>
+ * <li><b>/threaddump</b> - Write a JVM thread dump.</li>
  * <li><b>/undeploy?path=/xxx</b> - Shutdown and remove the web application
  *     attached to context path <code>/xxx</code> for this virtual host,
  *     and remove the underlying WAR file or document base directory.
@@ -116,6 +118,7 @@ import org.apache.tomcat.util.res.String
  *     base is stored in the <code>appBase</code> directory of this host,
  *     typically as a result of being placed there via the <code>/deploy</code>
  *     command.</li>
+ * <li><b>/vminfo</b> - Write some VM info.</li>
  * </ul>
  * <p>Use <code>path=/</code> for the ROOT context.</p>
  * <p>The syntax of the URL for a web application archive must conform to one
@@ -394,6 +397,10 @@ public class ManagerServlet extends Http
             undeploy(writer, cn, smClient);
         } else if (command.equals("/findleaks")) {
             findleaks(statusLine, writer, smClient);
+        } else if (command.equals("/vminfo")) {
+            vmInfo(writer, smClient, request.getLocales());
+        } else if (command.equals("/threaddump")) {
+            threadDump(writer, smClient, request.getLocales());
         } else {
             writer.println(smClient.getString("managerServlet.unknownCommand",
                     command));
@@ -562,8 +569,31 @@ public class ManagerServlet extends Http
             writer.println(smClient.getString("managerServlet.findleaksNone"));
         }
     }
-    
-    
+
+
+    /**
+     * Write some VM info
+     *
+     * @param writer
+     */
+    protected void vmInfo(PrintWriter writer, StringManager smClient,
+            Enumeration<Locale> requestedLocales) {
+        writer.println(smClient.getString("managerServlet.vminfo"));
+        writer.print(Diagnostics.getVMInfo(requestedLocales));
+    }
+
+    /**
+     * Write a JVM thread dump
+     *
+     * @param writer
+     */
+    protected void threadDump(PrintWriter writer, StringManager smClient,
+            Enumeration<Locale> requestedLocales) {
+        writer.println(smClient.getString("managerServlet.threaddump"));
+        writer.print(Diagnostics.getThreadDump(requestedLocales));
+    }
+
+
     /**
      * Store server configuration.
      * 

Copied: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java (from 
r1643738, tomcat/tc8.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java)
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java&p1=tomcat/tc8.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java&r1=1643738&r2=1643750&rev=1643750&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/Diagnostics.java Mon Dec  
8 07:21:03 2014
@@ -678,7 +678,7 @@ public class Diagnostics {
         sb.append(requestedSm.getString("diagnostics.vmInfoSystem"));
         sb.append(":" + CRLF);
         Map<String,String> props = runtimeMXBean.getSystemProperties();
-        ArrayList<String> keys = new ArrayList<>(props.keySet());
+        ArrayList<String> keys = new ArrayList<String>(props.keySet());
         Collections.sort(keys);
         for (String prop: keys) {
             sb.append(INDENT1 + prop + ": " + props.get(prop) + CRLF);

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=1643750&r1=1643749&r2=1643750&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Dec  8 07:21:03 2014
@@ -184,6 +184,11 @@
         Fix ambiguity of section links on Valves configuration reference page.
         (kkolinko)
       </fix>
+      <add>
+        <bug>57261</bug>: Add vminfo and threaddump commands to Manager
+        application. Implement <code>VminfoTask</code> and
+        <code>ThreaddumpTask</code> Ant tasks. (kkolinko)
+      </add>
       <fix>
         <bug>57323</bug>: Correct display of outdated sessions in sessions
         count listing in Manager application. (kkolinko)

Modified: tomcat/tc7.0.x/trunk/webapps/docs/manager-howto.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/manager-howto.xml?rev=1643750&r1=1643749&r2=1643750&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/manager-howto.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/manager-howto.xml Mon Dec  8 07:21:03 2014
@@ -857,6 +857,61 @@ has been reloaded several times, it may
 
 </subsection>
 
+<subsection name="Thread Dump">
+
+<source>http://localhost:8080/manager/text/threaddump</source>
+
+<p>Write a JVM thread dump.</p>
+
+<p>The response will look something like this:</p>
+<source><![CDATA[OK - JVM thread dump
+2014-12-08 07:24:40.080
+Full thread dump Java HotSpot(TM) Client VM (25.25-b02 mixed mode):
+
+"http-nio-8080-exec-2" Id=26 cpu=46800300 ns usr=46800300 ns blocked 0 for -1 
ms waited 0 for -1 ms
+   java.lang.Thread.State: RUNNABLE
+        locks java.util.concurrent.ThreadPoolExecutor$Worker@1738ad4
+        at sun.management.ThreadImpl.dumpThreads0(Native Method)
+        at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446)
+        at 
org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:440)
+        at 
org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:409)
+        at 
org.apache.catalina.manager.ManagerServlet.threadDump(ManagerServlet.java:557)
+        at 
org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:371)
+        at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
+        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
+...
+]]></source>
+
+</subsection>
+
+<subsection name="VM Info">
+
+<source>http://localhost:8080/manager/text/vminfo</source>
+
+<p>Write some diagnostic information about Java Virtual Machine.</p>
+
+<p>The response will look something like this:</p>
+<source><![CDATA[OK - VM info
+2014-12-08 07:27:32.578
+Runtime information:
+  vmName: Java HotSpot(TM) Client VM
+  vmVersion: 25.25-b02
+  vmVendor: Oracle Corporation
+  specName: Java Virtual Machine Specification
+  specVersion: 1.8
+  specVendor: Oracle Corporation
+  managementSpecVersion: 1.2
+  name: ...
+  startTime: 1418012458849
+  uptime: 393855
+  isBootClassPathSupported: true
+
+OS information:
+...
+]]></source>
+
+</subsection>
+
 </section>
 
 <section name="Server Status">
@@ -1085,6 +1140,8 @@ file might look something like this:</p>
   <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/>
   <typedef name="sessions"  classname="org.apache.catalina.ant.SessionsTask"/>
   <taskdef name="findleaks" classname="org.apache.catalina.ant.FindLeaksTask"/>
+  <typedef name="vminfo"    classname="org.apache.catalina.ant.VminfoTask"/>
+  <typedef name="threaddump" 
classname="org.apache.catalina.ant.ThreaddumpTask"/>
 
   <!-- Executable Targets -->
   <target name="compile" description="Compile web application">



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

Reply via email to