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