diff --git a/frameworks/Kieker/Benchmark (Kicker).launch b/frameworks/Kieker/Benchmark (Kicker).launch index 8cc80709acced2936ea9f31b04b5ffff71aba784..53456d055c4e64035ee952add4e50b872b86c2b6 100644 --- a/frameworks/Kieker/Benchmark (Kicker).launch +++ b/frameworks/Kieker/Benchmark (Kicker).launch @@ -8,7 +8,7 @@ </listAttribute> <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 1000 -o tmp/test.txt -q"/> +<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar"/> +<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar -Dkicker.monitoring.debug=true -Dkicker.monitoring.skipDefaultAOPConfiguration=true"/> </launchConfiguration> diff --git a/frameworks/Kieker/bin/meta-monitoring.sh b/frameworks/Kieker/bin/meta-monitoring.sh index 9b9795730dd7e826c081a0b1a5fa0fa461e10f5b..479096b1648bb428536aea85e14c4dbd007e8da7 100644 --- a/frameworks/Kieker/bin/meta-monitoring.sh +++ b/frameworks/Kieker/bin/meta-monitoring.sh @@ -7,11 +7,11 @@ RESULTSDIR="${BASEDIR}results/" THREADS=1 ## 1 RECURSIONDEPTH=10 ## 10 -TOTALCALLS=10000 ## 10000 +TOTALCALLS=1000 ## 2000000 METHODTIME=500000 ## 500000 #MOREPARAMS="--quickstart" -MOREPARAMS="${MOREPARAMS} -r kieker.Logger" +MOREPARAMS="${MOREPARAMS} -r kieker.Logger -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation" echo "Removing and recreating '$RESULTSDIR'" (rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} @@ -28,6 +28,7 @@ JAVAAGENT="-javaagent:lib/kicker-1.10_aspectj.jar" JAVAARGS="${JAVAARGS} -Dkieker.monitoring.writer.filesystem.AsyncFsWriter.customStoragePath=${RESULTSDIR}" JAVAARGS="${JAVAARGS} -Dkicker.monitoring.writer.filesystem.AsyncBinaryFsWriter.customStoragePath=${RESULTSDIR}" +JAVAARGS="${JAVAARGS} -Dkicker.monitoring.debug=true -Dkicker.monitoring.skipDefaultAOPConfiguration=true" ## Write configuration uname -a >${RESULTSDIR}configuration.txt @@ -51,5 +52,5 @@ sync mv ${BASEDIR}kieker.log ${RESULTSDIR}kieker.log [ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR} -zip -jqr ${BASEDIR}results.zip ${RESULTSDIR}* +zip -qr ${BASEDIR}results.zip ${RESULTSDIR}* [ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out diff --git a/frameworks/Kieker/lib/kicker-1.10_aspectj.jar b/frameworks/Kieker/lib/kicker-1.10_aspectj.jar index 3f5391c91089e8aa680a3a95e75e3878e9b6e2f3..9b85c0009a8b4d13b90a49fbe602ba67bb9e790a 100644 Binary files a/frameworks/Kieker/lib/kicker-1.10_aspectj.jar and b/frameworks/Kieker/lib/kicker-1.10_aspectj.jar differ diff --git a/frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java b/frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java new file mode 100644 index 0000000000000000000000000000000000000000..bf02cb69f49835b94cbe9e89a033d81623049e51 --- /dev/null +++ b/frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright 2014 Kieker Project (http://kieker-monitoring.net) + * + * 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 mooBench.monitoredApplication; + +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadMXBean; + +import kieker.common.record.flow.trace.TraceMetadata; +import kieker.common.record.flow.trace.operation.AfterOperationEvent; +import kieker.common.record.flow.trace.operation.AfterOperationFailedEvent; +import kieker.common.record.flow.trace.operation.BeforeOperationEvent; +import kieker.monitoring.core.controller.IMonitoringController; +import kieker.monitoring.core.controller.MonitoringController; +import kieker.monitoring.core.registry.TraceRegistry; +import kieker.monitoring.timer.ITimeSource; + +/** + * @author Jan Waller + */ +public final class MonitoredClassManualInstrumentation implements MonitoredClass { + + private static final IMonitoringController CTRLINST = MonitoringController.getInstance(); + private static final ITimeSource TIME = CTRLINST.getTimeSource(); + private static final TraceRegistry TRACEREGISTRY = TraceRegistry.INSTANCE; + + final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); + + /** + * Default constructor. + */ + public MonitoredClassManualInstrumentation() { + // empty default constructor + } + + public final long monitoredMethod(final long methodTime, final int recDepth) { + if (!CTRLINST.isMonitoringEnabled()) { + return this.monitoredMethod_actual(methodTime, recDepth); + } + final String signature = "public final long mooBench.monitoredApplication.MonitoredClassThreaded.monitoredMethod(long, int)"; + if (!CTRLINST.isProbeActivated(signature)) { + return this.monitoredMethod_actual(methodTime, recDepth); + } + // common fields + TraceMetadata trace = TRACEREGISTRY.getTrace(); + final boolean newTrace = trace == null; + if (newTrace) { + trace = TRACEREGISTRY.registerTrace(); + CTRLINST.newMonitoringRecord(trace); + } + final long traceId = trace.getTraceId(); + final String clazz = this.getClass().getName(); + // measure before execution + CTRLINST.newMonitoringRecord(new BeforeOperationEvent(TIME.getTime(), traceId, trace.getNextOrderId(), signature, clazz)); + // execution of the called method + final Object retval; + try { + retval = this.monitoredMethod_actual(methodTime, recDepth); + } catch (final Throwable th) { // NOPMD NOCS (catch throw might ok here) + // measure after failed execution + CTRLINST.newMonitoringRecord(new AfterOperationFailedEvent(TIME.getTime(), traceId, trace.getNextOrderId(), signature, clazz, + th.toString())); + throw new RuntimeException(th); + } finally { + if (newTrace) { // close the trace + TRACEREGISTRY.unregisterTrace(); + } + } + // measure after successful execution + CTRLINST.newMonitoringRecord(new AfterOperationEvent(TIME.getTime(), traceId, trace.getNextOrderId(), signature, clazz)); + return (Long) retval; + } + + public final long monitoredMethod_actual(final long methodTime, final int recDepth) { + if (recDepth > 1) { + return this.monitoredMethod(methodTime, recDepth - 1); + } else { + final long exitTime = this.threadMXBean.getCurrentThreadUserTime() + methodTime; + long currentTime; + do { + currentTime = this.threadMXBean.getCurrentThreadUserTime(); + } while (currentTime < exitTime); + return currentTime; + } + } + +}