You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by mo...@apache.org on 2009/05/26 15:50:02 UTC
svn commit: r778768 - in
/incubator/kato/trunk/org.apache.kato.tools.katoview/src: com/ibm/
org/apache/kato/katoview/ org/apache/kato/katoview/commands/
org/apache/kato/katoview/commands/helpers/
org/apache/kato/katoview/commands/infocommands/ org/apac...
Author: monteith
Date: Tue May 26 15:50:02 2009
New Revision: 778768
URL: http://svn.apache.org/viewvc?rev=778768&view=rev
Log:
Tomcat pools command added.
Added:
incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/JavaObjectVisitor.java (with props)
incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/tomcat/TomcatThreadPoolsCommand.java (with props)
Removed:
incubator/kato/trunk/org.apache.kato.tools.katoview/src/com/ibm/
Modified:
incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/Session.java
incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/TomcatCommand.java
incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/KatoSearch.java
incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/infocommands/InfoPropertyCommand.java
Modified: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/Session.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/Session.java?rev=778768&r1=778767&r2=778768&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/Session.java (original)
+++ incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/Session.java Tue May 26 15:50:02 2009
@@ -31,7 +31,6 @@
public class Session {
public static final String CORE_FILE_PATH_PROPERTY = "core_file_path";
- private String factoryName;
private Image loadedImage;
private RootCommand rootCommand;
private HashMap variables;
@@ -42,7 +41,6 @@
private static final String launcherProperty = "org.apache.kato.tools.katoview.launcher";
public Session(String[] args) {
- factoryName = System.getProperty(factoryProperty, defaultFactoryName);
sessionInit(args);
}
@@ -61,23 +59,6 @@
loadedImage = imageFromCommandLine(args);
}
- private ImageFactory getFactory() {
- try {
- Class factoryClass = Class.forName(factoryName);
- return (ImageFactory)factoryClass.newInstance();
- } catch (ClassNotFoundException e) {
- out.error("ClassNotFoundException while getting ImageFactory: " + e.getMessage());
- out.error("Use -D" + factoryProperty + "=<classname> to change the ImageFactory");
- return null;
- } catch (InstantiationException e) {
- out.error("InstantiationException while getting ImageFactory: " + e.getMessage());
- return null;
- } catch (IllegalAccessException e) {
- out.error("IllegalAccessException while getting ImageFactory: " + e.getMessage());
- return null;
- }
- }
-
/**
* @param args
*/
@@ -107,7 +88,7 @@
loadedImage = FactoryRegistry.getDefaultRegistry().getImage(new File(coreFilePath));
if (loadedImage == null) {
- throw new IOException("No ImageFactory could load "+loadedImage);
+ throw new IOException("No ImageFactory could load "+coreFilePath);
}
//Store the core file file path in the variables. We need it for creating default filenames for heapdumps
Modified: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/TomcatCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/TomcatCommand.java?rev=778768&r1=778767&r2=778768&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/TomcatCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/TomcatCommand.java Tue May 26 15:50:02 2009
@@ -16,6 +16,7 @@
import java.util.Vector;
import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.tomcat.TomcatThreadPoolsCommand;
import org.apache.kato.katoview.commands.tomcat.TomcatVersionCommand;
/**
@@ -32,7 +33,7 @@
super(o, COMMAND_NAME, DESCRIPTION, LONG_DESCRIPTION);
child_commands = new Vector();
child_commands.add(new TomcatVersionCommand(o));
-
+ child_commands.add(new TomcatThreadPoolsCommand(o));
}
}
Added: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/JavaObjectVisitor.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/JavaObjectVisitor.java?rev=778768&view=auto
==============================================================================
--- incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/JavaObjectVisitor.java (added)
+++ incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/JavaObjectVisitor.java Tue May 26 15:50:02 2009
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.helpers;
+
+import org.apache.kato.image.KatoException;
+import org.apache.kato.java.JavaObject;
+
+/**
+ * Used to visit objects.
+ *
+ *
+ */
+public interface JavaObjectVisitor {
+
+ /**
+ * callback to be executed over objects.
+ *
+ * @param object JavaObject being visited
+ * @return false if visiting is to stop
+ * @throws KatoException
+ */
+ public boolean visit(JavaObject object) throws KatoException;
+}
Propchange: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/JavaObjectVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/KatoSearch.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/KatoSearch.java?rev=778768&r1=778767&r2=778768&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/KatoSearch.java (original)
+++ incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/helpers/KatoSearch.java Tue May 26 15:50:02 2009
@@ -13,6 +13,8 @@
******************************************************************************/
package org.apache.kato.katoview.commands.helpers;
+import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import org.apache.kato.image.CorruptData;
@@ -24,6 +26,8 @@
import org.apache.kato.java.JavaClass;
import org.apache.kato.java.JavaClassLoader;
import org.apache.kato.java.JavaField;
+import org.apache.kato.java.JavaHeap;
+import org.apache.kato.java.JavaObject;
import org.apache.kato.java.JavaRuntime;
/**
@@ -194,4 +198,89 @@
}
return null;
}
+
+ /**
+ * Finds all instances of a given class and returns them in a list.
+ * Only suitable for small numbers.
+ *
+ * @param runtime
+ * @param clazz
+ * @return
+ */
+ public static List<JavaObject> findInstances(JavaRuntime runtime, JavaClass clazz) {
+ LinkedList<JavaObject> instances = new LinkedList<JavaObject>();
+ InstanceFinder finder = new InstanceFinder(instances, clazz);
+
+ visitObjects(runtime, finder);
+
+ return instances;
+ }
+
+ /**
+ * Helper class for finding JavaObjects of a certain JavaClass.
+ *
+ *
+ */
+ private static class InstanceFinder implements JavaObjectVisitor {
+ private JavaClass clazz;
+ private List<JavaObject> list;
+
+ public InstanceFinder(List<JavaObject> list, JavaClass clazz) {
+ this.list = list;
+ this.clazz = clazz;
+ }
+
+ public boolean visit(JavaObject object) throws KatoException {
+ if (clazz.equals(object.getJavaClass())) {
+ list.add(object);
+ }
+
+ return true;
+ }
+
+ }
+
+ /**
+ * Executes the passed JavaObjectVisitor over all objects on all the heaps in
+ * the given JavaRuntime.
+ * CorruptData objects are not passed.
+ *
+ * @param runtime JavaRuntime whose objects are being visited
+ * @param visitor Visitor to execute against each object.
+ */
+ public static void visitObjects(JavaRuntime runtime, JavaObjectVisitor visitor) {
+ Iterator heaps = runtime.getHeaps().iterator();
+
+ while (heaps.hasNext()) {
+ Object nextHeap = heaps.next();
+
+ if (nextHeap instanceof CorruptData) {
+ continue;
+ }
+
+ JavaHeap heap = (JavaHeap) nextHeap;
+
+ Iterator objects = heap.getObjects().iterator();
+
+ while (objects.hasNext()) {
+ Object nextObject = objects.next();
+
+ if (nextObject instanceof CorruptData) {
+ continue;
+ }
+
+ JavaObject object = (JavaObject) nextObject;
+
+ try {
+ boolean rc = visitor.visit(object);
+
+ if (rc == false) {
+ return;
+ }
+ } catch (KatoException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
}
Modified: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/infocommands/InfoPropertyCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/infocommands/InfoPropertyCommand.java?rev=778768&r1=778767&r2=778768&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/infocommands/InfoPropertyCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/infocommands/InfoPropertyCommand.java Tue May 26 15:50:02 2009
@@ -68,7 +68,13 @@
if (systemClass != null) {
try{
JavaField props = KatoSearch.getField(systemClass, "props");
+ if (props == null) {
+ return;
+ }
JavaObject systemProperties = (JavaObject) props.get(null);
+ if (systemProperties == null) {
+ return;
+ }
JavaClass propertyClass = systemProperties.getJavaClass();
JavaField tableField = KatoSearch.getField(propertyClass,"table");
JavaObject table = (JavaObject) tableField.get(systemProperties);
Added: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/tomcat/TomcatThreadPoolsCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/tomcat/TomcatThreadPoolsCommand.java?rev=778768&view=auto
==============================================================================
--- incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/tomcat/TomcatThreadPoolsCommand.java (added)
+++ incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/tomcat/TomcatThreadPoolsCommand.java Tue May 26 15:50:02 2009
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.tomcat;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Stack;
+
+import org.apache.kato.image.Image;
+import org.apache.kato.image.KatoException;
+import org.apache.kato.java.JavaClass;
+import org.apache.kato.java.JavaField;
+import org.apache.kato.java.JavaObject;
+import org.apache.kato.java.JavaRuntime;
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.JavaClassVisitor;
+import org.apache.kato.katoview.commands.helpers.JavaRuntimeVisitor;
+import org.apache.kato.katoview.commands.helpers.KatoSearch;
+
+/**
+ * Retrieves the version of Tomcat in the dump, or displays an error.
+ *
+ */
+public class TomcatThreadPoolsCommand extends Command {
+ private static final String SHORT_DESCRIPTION = "Shows thread pool state";
+ private static final String COMMAND_NAME = "pools";
+ private static final String LONG_DESCRIPTION = "Reports tomcat's thread pool state.";
+
+ // Look for this class.
+ private static final String THREAD_POOL_CLASS="org/apache/tomcat/util/threads/ThreadPool";
+ private static final String POOL_NAME = "name",
+ SERVER_BUILT = "serverBuilt",
+ SERVER_INFO = "serverInfo";
+
+ public TomcatThreadPoolsCommand(Output o) {
+ super(o, COMMAND_NAME, SHORT_DESCRIPTION, LONG_DESCRIPTION);
+
+ child_commands = null;
+ }
+
+ public void doCommand(Stack args, Image loadedImage, HashMap properties) {
+ try {
+ KatoSearch.visitRuntimes(loadedImage, new PrintVersion());
+ } catch (KatoException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * A visitor for finding the correct class and then return
+ *
+ */
+ private class PrintVersion implements JavaRuntimeVisitor, JavaClassVisitor {
+ boolean found = false;
+ JavaRuntime runtime;
+
+ public void visit(JavaRuntime runtime) throws KatoException {
+ found = false;
+ this.runtime = runtime;
+ KatoSearch.visitClasses(runtime, this);
+
+ if (found == false) {
+ out.println("ERROR: Couldn't find a Tomcat server");
+ }
+ }
+
+ public boolean visit(JavaClass clazz) throws KatoException {
+ if (clazz.getName().equals(THREAD_POOL_CLASS)) {
+ found = true;
+ JavaField nameField = KatoSearch.getField(clazz, POOL_NAME);
+
+ List<JavaObject> instances = KatoSearch.findInstances(runtime, clazz);
+ if (instances.size() >0) {
+ out.println("Found thread pools");
+ for (JavaObject obj : instances) {
+ try {
+ out.println("Pool name:" + nameField.getString(obj));
+
+ }catch (KatoException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return false; // Stop searching through classes.
+ }
+ return true;
+ }
+
+ }
+}
\ No newline at end of file
Propchange: incubator/kato/trunk/org.apache.kato.tools.katoview/src/org/apache/kato/katoview/commands/tomcat/TomcatThreadPoolsCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain