IBM Integration Bus, Version 9.0.0.5 Operating Systems: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

See information about the latest product version

What does this parser information mean for my message flow?

Although the overview parser statistics help you to identify which message flow domain has an issue, they cannot give the detail that is needed for you to rectify the problem. Therefore, to narrow down the search for the problem, the output from the parser manager must be captured.

The following command captures this output:
mqsireportproperties inode_name -e IntegrationServerLabel -o ComIbmParserManager -r > parserStats.txt
where inode_name is the name of the integration node and IntegrationServerLabel is the label of the integration server for which you are requesting a report.

This command produces a hierarchical output report that contains details of every parser that was created on every thread. This report is a 'point in time' report, such that if a message flow is in the middle of parsing a message, then the statistics are reported at that point. Therefore, to get an accurate representation, this command must be run after message flows finish processing their input messages.

The information is grouped by thread, such that for each thread there is the following example output:
Thread
  threadId='4'
  threadName='myMessageFlowName'
  totalParsers='7'
The threadId matches any trace information that is captured, such as for activity log or user/service trace.

The threadName is generally a message flow name. If threadName is reported as Thread-N, then this thread is an internal one that is doing work on behalf of the integration server. If a message flow has extra instances, then there is a thread block for each instance thread where each name is the same message flow; that is, the parser report is not grouped by message flow.

For each thread that has at least one parser, information is given about that parser. An example of the basic information that is given for each parser is as follows:
Parser
   name='XMLNSC'
   address='0x7f3fd8d89640'
   type='xmlnsc'
   isShared='FALSE'
   creationTime='2014-09-03 11:05:42.437368'
   lastUsedTime='2014-09-03 11:05:42.437376'
   totalTimesUsed='1'
   approxMemKB='35801.94'
   fields='228649'
   totalFieldsUsed='228649'
This report information is needed for answering the following questions:

How do I match a parser to the summary?

  • name
  • type
The name and type fields of the parser helps match it to the summary information that was viewed in IBM® Integration Explorer. The address of the parser matches with output in a trace node when a tree is displayed. If trace nodes were captured at different points in the flow, then matching this address indicates which node created the problematic parser.

Is the parser related to a shared variable?

  • isShared
The isShared field is reported as TRUE if the parser is related to a SHARED ROW variable. This value means that the parser is likely to be around for longer than just one message, and is unlikely to be reused.

How well is the parser reused?

  • creationTime
  • lastUsedTime
  • totalTimesUsed
These fields indicate when the parser was created, when it was last reused, and how many times it was reused. All unshared parsers are reset after they process an input message, by default. As such, these parsers are reused for each message through the flow. An efficient message flow reuses parsers while it processes a current input message.

If the parser statistics contain many parser records where the totalTimesUsed is 1, and the creationTime and lastUsedTime are both the same, then this message flow is not using parsers efficiently.

How big is the parser?

  • approxMemKB
  • fields
  • totalFieldsUsed

It is important to remember, this information indicates how large a cached parser is, NOT how large a message tree is.

This distinction is an important one. A message tree contains names, namespaces, and values; these statistics do not take these contents into consideration.

When a parser is assigned to do work, it uses its resources to form the current message tree. These resources might be smaller or larger than the last time it was used to form a message tree. If the new message tree is smaller, the parser reuses its existing cached elements. If the new message tree is larger than any encountered before, then the parser allocates new message tree fields to handle the size of the new message tree.

By default a parser never destroys any message tree fields that it creates, even when it is not in use or parsing a smaller message tree than before.

The ApproxMemKB metric is an estimate of storage that the fields themselves are occupying in kilobytes. As previously stated, this value does include data that was in a specific message tree such as names, namespaces, and values. As such, this metric is intended to give a base for comparison from one message flow to another.

The fields metric indicates how many cached fields this parser is associated with. This number never reduces, even if the DELETE FIELD command is used, because deleted fields are reused.

The totalFieldsUsed metric is a cumulative total of all fields that were used each time that the parser was used. This metric is intended to be used with the totalTimesUsed metric to determine an average number of fields that are used per message. For example, a parser might have 200 cached fields but have a totalFieldsUsed value of 500. This value of 500 might come from 5 parses where the following number of elements are used: 100, 50, 50, 200, 100. Therefore, 200 is the maximum tree size that is created, and as such this value matches the total cached fields.


bj60102_.htm | 
        
        Last updated:
        
        Last updated: 2016-08-12 11:20:24