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}

The trace extension is packaged in both jxinsight-all.jar and jxinsight-ext-jbossaop.jar. The following system property needs to be set to ensure that load time weaving is not performed on JXInsight classes which are encrypted by default.
-Djboss.aop.exclude=com.jinspired

JSF Trace Extension
To integrate the JXInsight JSF trace extension into an application simply register the phase listener class, com.jinspired.jxinsight.trace.ext.jsf.TracePhaseListener, in the applications faces-config.xml

<lifecycle>
<phase-listener>com.jinspired.jxinsight.trace.ext.jsf.TracePhaseListener</phase-listener>
<!-- register other phase listeners here -->
</lifecycle>



The trace extension can be configured to delimit a trace into distinct trace identifiers.

jxinsight.server.tracer.ext.jsf.phase.trace.identifiers=${jsf.phase.view.id},${jsf.phase.id}

Variables must be delimited by a comma. The list of possible variables for traces are:

${jsf.phase.id}
${jsf.phase.view.id}
${jsf.phase.view.cid}
${jsf.phase.view.type}
${jsf.phase.view.family}
${jsf.phase.view.renderkit}

System Properties
# enable or disable the tracing of all phases
jxinsight.server.tracer.ext.jsf.phase.trace.enabled=true
# enable or disable the tracing of the 'Restore View' phase
jxinsight.server.tracer.ext.jsf.phase.restore.enabled=true
# enable or disable the tracing of the 'Apply Request Values' phase
jxinsight.server.tracer.ext.jsf.phase.apply.enabled=true
# enable or disable the tracing of the 'Process Validations' phase
jxinsight.server.tracer.ext.jsf.phase.process.trace.enabled=true
# enable or disable the tracing of the 'Update Model Values' phase
jxinsight.server.tracer.ext.jsf.phase.update.enabled=true
# enable or disable the tracing of the 'Invoke Application' phase
jxinsight.server.tracer.ext.jsf.phase.invoke.trace.enabled=true
# enable or disable the tracing of the 'Render Response' phase
jxinsight.server.tracer.ext.jsf.phase.render.enabled=true

JNDI Trace Filtering
Added system properties to filter the tracing of object retrieved via JNDI lookups based on the JNDI lookup name (Name or String)

jxinsight.server.tracer.ext.jndi.filter.jndi.excludes=
jxinsight.server.tracer.ext.jndi.filter.jndi.includes=

Both properties take a comma separated string value consisting of JNDI prefixes to be excluded or included. For example the instructs the server to only trace components retrieved via a local Java component environment lookup.

-Djxinsight.server.tracer.ext.jndi.filter.jndi.includes=java:comp/env
or
-Djxinsight.server.tracer.ext.jndi.filter.jndi.includes=java:comp

To filter out the tracing of Borland Enterprise Server internal service and component housekeeping activities specify

-Djxinsight.server.tracer.ext.jndi.filter.jndi.excludes=serial:

Borland VisiBroker Trace Extension Enhancements
Added system properties to Borland VisiBroker trace extension to allow fine grain control of traced operations.

# enable or disable outbound request tracing
jxinsight.server.tracer.ext.visibroker.client.trace.enabled=true
# enable or disable inbound request tracing
jxinsight.server.tracer.ext.visibroker.server.trace.enabled=true
# enable or disable the insertion of client trace context in outbound request
jxinsight.server.tracer.ext.visibroker.server.clienttraces.include=true
# enable or disable the extraction of client trace context in inbound request
jxinsight.server.tracer.ext.visibroker.client.clienttraces.include=true
# a comma separated string value consisting of operation name prefixes to be excluded from outbound traces
jxinsight.server.tracer.ext.visibroker.client.filter.operation.excludes=_is_a,_get_EJBMetaData
# a comma separated string value consisting of operation name prefixes to be included within outbound traces
jxinsight.server.tracer.ext.visibroker.client.filter.operation.includes=
# a comma separated string value consisting of operation name prefixes to be excluded from inbound traces
jxinsight.server.tracer.ext.visibroker.server.filter.operation.excludes=
# a comma separated string value consisting of operation name prefixes to be included within inbound traces
jxinsight.server.tracer.ext.visibroker.server.filter.operation.includes=
# a comma separated string value consisting of IDL type id prefixes to be excluded from outbound traces
jxinsight.server.tracer.ext.visibroker.client.filter.typeid.excludes=
# a comma separated string value consisting of IDL type id prefixes to be included within outbound traces
jxinsight.server.tracer.ext.visibroker.client.filter.typeid.includes=
# a comma separated string value consisting of IDL type id prefixes to be excluded from inbound traces
jxinsight.server.tracer.ext.visibroker.server.filter.typeid.excludes=
# a comma separated string value consisting of IDL type id prefixes to be included within inbound traces
jxinsight.server.tracer.ext.visibroker.server.filter.typeid.includes=
# a comma separated string value consisting of IDL type id prefixes that will include client traces in outbound requests
jxinsight.server.tracer.ext.visibroker.client.clienttraces.filter.typeid.includes=
# a comma separated string value consisting of IDL type id prefixes that will exclude client traces in outbound requests
jxinsight.server.tracer.ext.visibroker.client.clienttraces.filter.typeid.excludes=
# a comma separated string value consisting of operation name prefixes that will include client traces in outbound requests
jxinsight.server.tracer.ext.visibroker.client.clienttraces.filter.operation.includes=
# a comma separated string value consisting of operation name prefixes that will exclude client traces in outbound requests
jxinsight.server.tracer.ext.visibroker.client.clienttraces.filter.operation.excludes=

Java Dynamic Proxy Trace Extension
The extension profiles instances of java.lang.reflect.Proxy retrieved directly or indirectly from a JNDI context. The extension is by default disabled. To turn on tracing specify the following system property:

jxinsight.server.tracer.ext.dynamicproxy.proxy.enabled=true

The trace extension can be configured to delimit a trace into distinct trace identifiers.

jxinsight.server.tracer.ext.dynamicproxy.trace.identifiers=${dynamicproxy.jndi},${dynamicproxy.classname},${dynamicproxy.operation}

Variables must be delimited by a comma. The list of possible variables for traces are:

${dynamicproxy.jndi}
${dynamicproxy.classname}
${dynamicproxy.operation}
${dynamicproxy.method}
${dynamicproxy.codesource}
${dynamicproxy.package}
${dynamicproxy.fullclassname}


JXInsight JVMInsight

JBoss AOP JVMInsight Extension
The extension inspects the JBoss AOP runtime collecting object field state information for the following JBoss AOP classes:

AspectManager, PointcutExpression, AspectDefinition, AspectFactory, AdviceStack, AdviceBinding, InterceptorFactory,
PointcutInfo, AnnotationIntroduction, InterfaceIntroduction, InterfaceIntroduction.Mixin, AnnotationRepository,
Advisor, ClassAdvisor, CFlowStack, MethodMetaData, FieldMetaData, ConstructorMetaData, SimpleMetaData, JoinPoint,
MethodJoinPoint



JXInsight Metrics Extension
Added new extension that provides a snapshot of the last sampled JXInsight metric values.



System Properties
# enable (default) or disable repository provider extension
jxinsight.server.cmdb.ext.metrics.enable=true

JNDI Extension
The extension now includes object field state graph for (leaf) objects bound in the JNDI. Extracting object field state graph information is extremely useful in understanding the non-public state of objects bound in the JNDI.



System Properties
# include or exclude object field state graph from the repository model
jxinsight.server.cmdb.ext.jndi.memento.include=true|false (default is true)
# the maximum depth of the object field state graph for a bound object
jxinsight.server.cmdb.ext.jndi.memento.maxdepth=8

JMX Extension
The extension inspects the local JMX MBeanServers registered with the MBeanServerFactory collecting metadata and attribute state information for registered MBeans across all domains.



System Properties
# enable or disable the extension
jxinsight.server.cmdb.ext.jmx.enable=true
# include MBean attribute metadata and state information
jxinsight.server.cmdb.ext.jmx.mbean.attribute.include=true
# include current values of MBean attributes
jxinsight.server.cmdb.ext.jmx.mbean.attribute.value.include=true
# include an object field state graph of complex MBean attribute values
jxinsight.server.cmdb.ext.jmx.mbean.attribute.value.memento.include=true
# the maximum depth of object field state graph for an included MBean attribute value
jxinsight.server.cmdb.ext.jmx.mbean.attribute.value.memento.maxdepth=8
# include operation metadata
jxinsight.server.cmdb.ext.jmx.mbean.operation.include=true
# include MBean notification metadata
jxinsight.server.cmdb.ext.jmx.mbean.notification.include=true
# include MBean constructor metadata
jxinsight.server.cmdb.ext.jmx.mbean.constructor.include=true
# include MBean parameter metadata for constructors and operations
jxinsight.server.cmdb.ext.jmx.mbean.parameter.include=true
# a comma separated string value consisting of domain name prefixes to be included
jxinsight.server.cmdb.ext.jmx.domain.filter.name.excludes=
# a comma separated string value consisting of domain name prefixes to be excluded
jxinsight.server.cmdb.ext.jmx.domain.filter.name.includes=

WebLogic JMX Extension
The extension inspects the JMX MBeanServers stored in the local JNDI service.

System Properties
# enable or disable the extension
jxinsight.server.cmdb.ext.jmx.weblogic.enable=true
# include the local MBeanServer @see weblogic.management.MBeanHome.LOCAL_JNDI_NAME
jxinsight.server.cmdb.ext.jmx.weblogic.server.local.include=true
# include the admin MBeanServer @see weblogic.management.MBeanHome.ADMIN_JNDI_NAME
jxinsight.server.cmdb.ext.jmx.weblogic.server.admin.include=false

Composite Repository Providers
Added ability to create composite repository providers based on primary repository providers.



For example the following system property creates a new repository provider that aggregates configuration and state information from the Java 5 Mgmt and JBoss AOP extensions.

-Djxinsight.server.cmdb.ext.groups=mygroup -Djxinsight.server.cmdb.ext.groups.mygroup.exts=jmgmt,jbossaop

The name of the repository appearing in the JXInsight console by default will be the group identifier and the list of extensions. In the example above the name will be "mygroup [jmgmt,jbossaop]". To change the name to something more user friendly specify:

jxinsight.server.cmdb.ext.groups.mygroup.name=MyGroup

System Property Patterns
jxinsight.server.cmdb.ext.groups=${group}
jxinsight.server.cmdb.ext.groups.${group}.exts=${provider},${provider},...
jxinsight.server.cmdb.ext.groups.${group}.name=

Enablement and Disablement
Added server system properties to disable individual JVMInsight respository providers. When 'enable' is set to false the provider will not appear in the list of repositories within in the JXInsight console.

jxinsight.server.cmdb.ext.jndi.enable=true
jxinsight.server.cmdb.ext.hpovobs.enable=true
jxinsight.server.cmdb.ext.jmgmt.enable=true
jxinsight.server.cmdb.ext.jrockit.enable=true
jxinsight.server.cmdb.ext.logging.enable=true
jxinsight.server.cmdb.ext.rmi.enable=true
jxinsight.server.cmdb.ext.cosnaming.enable=true
jxinsight.server.cmdb.ext.jdbc.datasource.enable=true
jxinsight.server.cmdb.ext.jdbc.activewatch.enable=true
jxinsight.server.cmdb.ext.swing.enable=true
jxinsight.server.cmdb.ext.jbossaop.enable=true
jxinsight.server.cmdb.ext.jmx.enable=true
jxinsight.server.cmdb.ex.jmx.weblogic.enable=true

System Property Pattern
jxinsight.server.cmdb.ext.${provider}.enable=true|false


JXInsight Console


Trace Suffix Trees

Added auxillary Suffix Tree views to Traces, Transactions and Paths perspective. The views helps aggregate paths, trace types and identifiers across large trace trees. The suffix tree representation also facilitates the searching of trace calling patterns nested within trace tree. The suffix tree can be sorted by the selection of an aggregation function (total, count, min, avg, max) .



Color Encoding of Traces
Traces in the timeline graphic are colored based on a mapping of trace type to color definition within the jxinsight.console.config file located in the install root directory.




Console System Properties
jxinsight.console.colors.ejbhome=220,202,184
jxinsight.console.colors.ejbobject=220,202,184
jxinsight.console.colors.jaxrpc=228,209,247
jxinsight.console.colors.jca=215,185,185
jxinsight.console.colors.jms=230,230,195
jxinsight.console.colors.jndi=255,255,204
jxinsight.console.colors.jta=174,174,217
jxinsight.console.colors.jts=174,174,217
jxinsight.console.colors.servlet=208,225,247
jxinsight.console.colors.rmi=240,219,179
jxinsight.console.colors.corba=229,244,240
jxinsight.console.colors.jdbc=250,235,205
jxinsight.console.colors.jmx=255,204,204
jxinsight.console.colors.log=243,243,243
jxinsight.console.colors.awt=228,232,248
jxinsight.console.colors.jdo=226,240,214
jxinsight.console.colors.hibernate=224,214,180
jxinsight.console.colors.ant=240,188,222
jxinsight.console.colors.commonj=216,216,190
jxinsight.console.colors.jboss.aop=255,255,255
jxinsight.console.colors.jcr=196,208,220
jxinsight.console.colors.junit=205,222,205
jxinsight.console.colors.spring=221,238,136
jxinsight.console.colors.testng=205,222,205
jxinsight.console.colors.visibroker=229,244,240
jxinsight.console.colors.hpovobs=196,208,220

Custom trace types can also be mapped in the same manner. The console will look for a system property within the config file that is a concatenation of "jxinsight.console.colors." and the trace type. When a trace type contains the '.' character then each namespace is parsed and an attempt to find the configured color is made. For example a trace type of "myapp.myapp.myclass" will result in the following config property lookups

jxinsight.console.colors.myapp.mycomp.myclass
jxinsight.console.colors.myapp.mycomp
jxinsight.console.colors.myapp

Trace Stack Visualization
Added new trace stack visualization to bottom of Traces table view within the Traces perspective. The graphic helps in identifying nested nodes within a large trace tree that contribute greatly to a particular measurement. Each item within the combo box represents a trace node with the complete trace tree. An adjacent combo box allows selection of the numeric property used in determining the length of each component in the trace stack graphic.



Classloaders
Classloader information is now presented in class and method tooltips




JXInsight JDBInsight

SQL Parsing

Adding system properties to allow fine grain configuration of the unbinding of values from JDBC/SQL strings

jxinsight.server.jdbc.unbindvalues.exclude.orderby.enabled=true
jxinsight.server.jdbc.unbindvalues.exclude.groupby.enabled=true
jxinsight.server.jdbc.unbindvalues.exclude.top.enabled=true
jxinsight.server.jdbc.unbindvalues.exclude.select.enabled=false
jxinsight.server.jdbc.unbindvalues.exclude.where.enabled=false
jxinsight.server.jdbc.unbindvalues.exclude.having.enabled=true
jxinsight.server.jdbc.unbindvalues.exclude.values.enabled=false
jxinsight.server.jdbc.unbindvalues.exclude.set.enabled=false
jxinsight.server.jdbc.unbindvalues.exclude.from.enabled=false

JXInsight Agent

Mac OSX Intel
Updated the JVMPI Agent dynamic library on OSX to an Universal Binary