|
JMeter example source code file (HeapDumper.java)
The JMeter HeapDumper.java source code/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.jorphan.util; import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; import java.text.SimpleDateFormat; import java.util.Date; import javax.management.InstanceNotFoundException; import javax.management.MBeanException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.RuntimeMBeanException; /** * Class allowing access to Sun's heapDump method (Java 1.6+). * Uses Reflection so that the code compiles on Java 1.5. * The code will only work on Sun Java 1.6+. */ public class HeapDumper { // SingletonHolder idiom for lazy initialisation private static class DumperHolder { private static final HeapDumper DUMPER = new HeapDumper(); } private static HeapDumper getInstance(){ return DumperHolder.DUMPER; } // This is the name of the HotSpot Diagnostic platform MBean (Sun Java 1.6) // See: http://java.sun.com/javase/6/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html private static final String HOTSPOT_BEAN_NAME = "com.sun.management:type=HotSpotDiagnostic"; private static final SimpleDateFormat TIME_STAMP_FORMAT = new SimpleDateFormat("yyyyMMdd_hhmmss_SSS"); // These are needed for invoking the method private final MBeanServer server; private final ObjectName hotspotDiagnosticBean; // If we could not find the method, store the exception here private final Exception exception; // Only invoked by IODH class private HeapDumper() { server = ManagementFactory.getPlatformMBeanServer(); // get the platform beans ObjectName on = null; Exception ex = null; try { on = new ObjectName(HOTSPOT_BEAN_NAME); // should never fail server.getObjectInstance(on); // See if we can actually find the object } catch (MalformedObjectNameException e) { // Should never happen throw new AssertionError("Could not establish the HotSpotDiagnostic Bean Name: "+e); } catch (InstanceNotFoundException e) { ex = e; on = null; // Prevent useless dump attempts } exception = ex; hotspotDiagnosticBean = on; } /** * Initialise the dumper, and report if there is a problem. * This is optional, as the dump methods will initialise if necessary. * * @throws Exception if there is a problem finding the heapDump MXBean */ public static void init() throws Exception { Exception e =getInstance().exception; if (e != null) { throw e; } } /** * Dumps the heap to the outputFile file in the same format as the hprof heap dump. * <p> * Calls the dumpHeap() method of the HotSpotDiagnostic MXBean, if available. * <p> * See * <a href="http://java.sun.com/javase/6/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html"> * HotSpotDiagnosticMXBean * </a> * @param fileName name of the heap dump file. Must be creatable, i.e. must not exist. * @param live if true, dump only the live objects * @throws Exception if the MXBean cannot be found, or if there is a problem during invocation */ public static void dumpHeap(String fileName, boolean live) throws Exception{ getInstance().dumpHeap0(fileName, live); } /** * Dumps live objects from the heap to the outputFile file in the same format as the hprof heap dump. * <p> * @see #dumpHeap(String, boolean) * @param fileName name of the heap dump file. Must be creatable, i.e. must not exist. * @throws Exception if the MXBean cannot be found, or if there is a problem during invocation */ public static void dumpHeap(String fileName) throws Exception{ dumpHeap(fileName, true); } /** * Dumps live objects from the heap to the outputFile file in the same format as the hprof heap dump. * <p> * Creates the dump using the file name: dump_yyyyMMdd_hhmmss_SSS.hprof * The dump is created in the current directory. * <p> * @see #dumpHeap(boolean) * @return the name of the dump file that was created * @throws IOException * @throws Exception if the MXBean cannot be found, or if there is a problem during invocation */ public static String dumpHeap() throws Exception{ return dumpHeap(true); } /** * Dumps objects from the heap to the outputFile file in the same format as the hprof heap dump. * <p> * Creates the dump using the file name: dump_yyyyMMdd_hhmmss_SSS.hprof * The dump is created in the current directory. * <p> * @see #dumpHeap(String, boolean) * @param live true id only live objects are to be dumped. * * @return the name of the dump file that was created * @throws IOException * @throws Exception if the MXBean cannot be found, or if there is a problem during invocation */ public static String dumpHeap(boolean live) throws Exception { return dumpHeap(new File("."), live); } /** * Dumps objects from the heap to the outputFile file in the same format as the hprof heap dump. * The dump is created in the specified directory. * <p> * Creates the dump using the file name: dump_yyyyMMdd_hhmmss_SSS.hprof * <p> * @see #dumpHeap(String, boolean) * @param basedir File object for the target base directory. * @param live true id only live objects are to be dumped. * * @return the name of the dump file that was created * @throws IOException * @throws Exception if the MXBean cannot be found, or if there is a problem during invocation */ public static String dumpHeap(File basedir, boolean live) throws Exception { String stamp = TIME_STAMP_FORMAT.format(new Date()); File temp = new File(basedir,"dump_"+stamp+".hprof"); final String path = temp.getPath(); dumpHeap(path, live); return path; } /** * Perform the dump using the dumpHeap method. * * @param fileName the file to use * @param live true to dump only live objects * @throws Exception if the MXBean cannot be found, or if there is a problem during invocation */ private void dumpHeap0(String fileName, boolean live) throws Exception { try { if (exception == null) { server.invoke(hotspotDiagnosticBean, "dumpHeap", new Object[]{fileName, Boolean.valueOf(live)}, new String[]{"java.lang.String", "boolean"}); } else { throw exception; } } catch (RuntimeMBeanException e) { Throwable f = e.getCause(); if (f instanceof Exception){ throw (Exception )f; } throw(e); } catch (MBeanException e) { Throwable f = e.getCause(); if (f instanceof Exception){ throw (Exception )f; } throw(e); } } } Other JMeter examples (source code examples)Here is a short list of links related to this JMeter HeapDumper.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.