JXInsight 4.2.4 Update - Logging Metrics and Inspections
JXInsight 4.2.3 Update - Threads Stacks & States and Artifact Changes
JXInsight 4.2.2 Update -
Apache Tomcat Monitoring and
Web App Inspections
JXInsight 4.2.1 Update -
Tangosol Coherence Monitoring and
UI Enhancements
Performance Enhancements
Core components and extensions have undergone extensive benchmarking and performance tuning. In comparitive tests with similar JEE component profiling products JXInsight has been shown to have up
30 times less overhead while collecting significantly more contextual resource consumption metric information. All distributed trace extensions (JMS, WebLogic, CORBA, VisiBroker, HP OpenView SD, JBoss Client-Container Interceptors) have faster marshalling of client trace context.
Memory Footprint
Reductions in server memory footprint in production analysis mode. Improvements in client snapshot model memory management.
Misc
New system property to exclude call stack line numbers from snapshot models. This can in some cases reduce the size of the profile and timeline model when there are large line number differences in similiar transactions and traces -Djxinsight.server.callstack.linenos.include=false
JXInsight Metrics
JMX Extension
Added ability to continously sample JMX MBean numerical attributes and present them as JXInsight metrics within the management console's Metric analysis mode.
Users can define JMX metric groups via the following Java system properties.
jxinsight.server.profiler.metrics.jmx.groups=<comma separated list of group ids>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.defaultdomain=<default domain name of MBeanServer registered with MBeanServerFactory>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbeans=<comma separated list of mbean-ids>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbean.<mbean-id>.name=<ObjectName>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbean.<mbean-id>.attributes=<comma separated list of attribute-ids>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbean.<mbean-id>.attribute.<attribute-id>.name=<Attribute>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbean.<mbean-id>.attribute.<attribute-id>.type=<SuffixPattern>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbean.<mbean-id>.attribute.<attribute-id>.multiplier=<Long>
jxinsight.server.profiler.metrics.jmx.group.<group-id>.mbean.<mbean-id>.attribute.<attribute-id>.aggregate=<AggregateType>
The type property is used by the management console to determine the characterics of a metric for charting purposes. The following are preferred values
cumulative.count
cumulative.time
cumulative.bytes
current.count
count
maximum.count
maximum.time
maximum.bytes
Because JXInsight metrics are stored as long value and time is recorded in microseconds a multiplier property can be specified at the attribute level to handle percentage metrics represented as decimals or time as milliseconds. For a percentage attribute set the value to 100. For an attribute recording clock or cpu time in milliseconds set the value to 1000.
The aggregate property is used to determine how a single metric value is derived from an ObjectName pattern result set of size greater than 1. By default the JXInsight metric will 'total' all attribute values for each MBean reference (ObjectName or ObjectInstance) returned. The value of the aggregate property can be one of the following:
total
max
min
count
avg
The following is an extract from the built-in JBoss 4.0 JMX-to-Metric mapping configuration.
# jmx.jboss.v4
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbeans=
tx,cache.entity,cache.sfsb,cache.tomcat,jca.cp,jca.tp,mq.cache,mq.tp,mq.topic,mq.queue,system.tp,web.tp,web.processor,web.manager,web.module,web.servlet
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.label=jboss
# jmx.jboss.tx
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbean.tx.objectname=jboss:service=TransactionManager,*
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbean.tx.attributes=active,commit,rollback
# jmx.jboss.tx.active
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbean.tx.attribute.active.name=TransactionCount
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbean.tx.attribute.active.type=current.count
# jmx.jboss.tx.commit
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbean.tx.attribute.commit.name=CommitCount
jxinsight.server.profiler.metrics.jmx.group.jboss.v4.mbean.tx.attribute.commit.type=cumulative.count
To enable the above configuration specify the following system property.
-Djxinsight.server.profiler.metrics.jmx.groups=jboss.v4
JXInsight 4.2 ships with four existing JMX-to-Metric mapping configurations. These are WebLogic 8.x, WebLogic 9.x, JBoss 3.x, and JBoss 4.x.
# to capture JMX Metrics for WebLogic 9.x specify the following system property
jxinsight.server.profiler.metrics.jmx.groups=weblogic.v9
# to collect JMX metrics for a WebLogic 8.x server specify the following system property
jxinsight.server.profiler.metrics.jmx.groups=weblogic.v8
JXInsight Trace
Execution and Exception Diagnostics
Significant enhancement have been added to the timeline snapshot analysis including the ability to turn on the capturing of contextual trace state information related to trace call arguments, results, exceptions, thread, request context and target object. The state information recorded in a memento object contains a limited object graph of the field state. The information presented is similar to that found in standard Java code debuggers but without the overhead of running the JVM in debug mode.

System Properties
jxinsight.server.profiler.timeline.trace.memento.args.include=true|false (default false)
jxinsight.server.profiler.timeline.trace.memento.exception.include=true|false (default false)
jxinsight.server.profiler.timeline.trace.memento.result.include=true|false (default false)
jxinsight.server.profiler.timeline.trace.memento.target.include=true|false (default false)
jxinsight.server.profiler.timeline.trace.memento.thread.include=true|false (default false)
jxinsight.server.profiler.timeline.trace.memento.context.include=true|false (default false)
jxinsight.server.profiler.timeline.trace.memento.filter.identifiers.includes=
jxinsight.server.profiler.timeline.trace.memento.filter.identifiers.excludes=
# do not generate memento models for ejb traces
# jxinsight.server.profiler.timeline.trace.memento.filter.identifiers.excludes=${ejbobject,${ejbhome
# the number of array elements recorded
jxinsight.server.cmdb.ext.reflect.field.array.maxlength=132
# the maximum depth of the object graph
jxinsight.server.cmdb.ext.reflect.maxdepth=8
# should fields with null values be recorded
jxinsight.server.cmdb.ext.reflect.field.nulls.include=false
# should arrays with null elements be recorded
jxinsight.server.cmdb.ext.reflect.field.array.nulls.include=false
# should the internal fields of the String class be introspected
jxinsight.server.cmdb.ext.reflect.field.string.fields.include=false
jxinsight.server.cmdb.ext.reflect.field.types.excludes=<classname-prefix-1,classname-prefix-2,...>
jxinsight.server.cmdb.ext.reflect.field.types.includes=<classname-prefix-1,classname-prefix-2,...>
# a comma separated list of JVMInsight extensions to be included
jxinsight.server.profiler.timeline.trace.memento.cmdb.exts=
# enable or disable the generation of a memento model when an exception is thrown by a trace in timeline analysis mode
jxinsight.server.profiler.timeline.trace.memento.onexception.args.include=false
jxinsight.server.profiler.timeline.trace.memento.onexception.result.include=false
jxinsight.server.profiler.timeline.trace.memento.onexception.target.include=false
jxinsight.server.profiler.timeline.trace.memento.onexception.thread.include=false
jxinsight.server.profiler.timeline.trace.memento.onexception.context.include=false
jxinsight.server.profiler.timeline.trace.memento.onexception.cmdb.exts=
JBoss AOP Trace Extension
The integration of JXInsight with JBoss AOP is performed via the registration of a tracing implementation of org.jboss.aop.advice.Interceptor.
The following XML is an example jboss-aop.xml that weaves the trace extension into all methods of Clock classes.
<aop>
<interceptor name="Tracer" class="com.jinspired.jxinsight.trace.ext.jboss.aop.TraceInterceptor"/>
<bind pointcut="execution(* *.Clock->*())">
<interceptor-ref name="Tracer"/>
</bind>
</aop>
The trace extension can be configured to delimit a trace into distinct trace identifiers via a system property or Java bean property.
-Djxinsight.server.tracer.ext.jboss.aop.trace.identifiers=${jboss.aop.classname},${jboss.aop.operation}
<aop>
<interceptor name="Tracer" class="com.jinspired.jxinsight.trace.ext.jboss.aop.TraceInterceptor">
<attribute name="identifiers">${jboss.aop.operation}</attribute>
</interceptor>
<bind pointcut="execution(* *.Clock->*())">
<interceptor-ref name="Tracer"/>
</bind>
</aop>
Variables must be delimited by a comma. The list of possible variables for traces are:
${jboss.aop.codesource}
${jboss.aop.package}
${jboss.aop.classname}
${jboss.aop.fullclassname}
${jboss.aop.operation}
${jboss.aop.method}
${jboss.aop.signature} ${trace.timestamp}
${trace.object.hashcode}
${trace.thread.hashcode}
${trace.thread.name}