How to activity trace the MO71 application

MO71 utilises the MQCNO_ACTIVITY_TRACE_DISABLED option so that while using it to view activity trace records, you are not also generating even more! This is of course, only honoured if the queue manager allows it which is controlled by the queue manager attribute ACTVCONO. So in addition, the MO71 Activity trace viewer also has some quick check boxes to hide from view all its records should they be generated.

Inspect MO71What if you want to see the activity trace for MO71 though? For example if you want to trace the API Exerciser?

There are two ways to over-ride the use of MQCNO_ACTIVITY_TRACE_DISABLED. One is to use the following command (which applies the over-ride to all applications that have specified it).


The other is to add a stanza like the following to your queue manager’s mqat.ini file. Remember if MO71 is already connected, you can make an alteration to the queue manager object to get it to pick up the new mqat.ini file or just disconnect and reconnect to the queue manager to pick it up.

# Turn on tracing for MO71

Now looking at the Activity Trace window, on the “Settings” tab, uncheck “Exclude this process” so you can see records from this process ID, and also “Exclude MO71 processes” which just causes the filtering for the “Output” tab to hide any records that come from any “mqmonntp.exe”. Remember to press Apply Settings once you’ve made these and any other filtering changes.

Activity Trace Settings Exclude Checkboxes

Activity Trace Settings Page – Check boxes to exclude MO71 trace records

Note: With these two check boxes, you could run one instance of MO71 to view the Activity Trace records, and a second instance of MO71 doing the activity you want to trace, for example using the API Exerciser, then you could leave “Exclude this process” checked and only uncheck “Exclude MO71 processes”.

It may also be wise to turn off any automatic operations that are being done by MO71, such as exporting objects on a scheduled time interval, which would generate a lot of activity from MO71 in the trace.

Then you’ll be able to see any API calls made by the MO71 application, for example:-

13:38:35   8220( 21) [   85us] C:\MQGem\mqmonntp.exe MQOPEN INPUT.Q 
   Connection Id:414D51434D514731202020202020202027E1F55920005205
   Hobj         :8 QUEUE(MQG1/INPUT.Q)
   Open Options :00000010
                 00000010 MQOO_OUTPUT                    (Output)
   Dynamic Queue:AMQ.*
   CompCode     :0    
   Reason       :0     OK.

Other resources that you may find useful about Activity Tracing.


Education Courses Prize Draw at MQTCv2.0.1.7

At the recent MQTC Conference, MQGem ran a Prize Draw where one lucky entrant would win access to five free education courses by MQGem which will be going live in November. These courses can be done by the winning entrant or any member of his company, so if he has any new members in his department that can benefit from some IBM MQ education, they could use them.

The draw was made at lunchtime on the final day of the conference and the lucky winner was John Edelmann from the Defense Logistics Agency (DLA).

The prize draw winner

Morag Hughson (MQGem) with John Edelmann, the prize draw winner.

John will receive access to his five free courses sometime around the beginning of November 2017 when the MQGem Education courses go live. Look out for further announcements on here if you’re interested in taking some online education courses yourself.

Configuring List Dialogs in MO71

MO71 is our graphical administration tool for IBM MQ. You can manage all the different object types in MQ using its lists and object dialogs. The lists are fully flexible allowing you to determine which fields are interesting to you and which are not and choosing only to display those columns in the list as a result.

You can make these changes temporarily, just to the instance of the dialog you are currently using. You can make them more permanently, so that every time you bring up that list on that queue manager, you have the same columns. Or finally, you can make these changes across all your queue managers, because the columns you want are the ones you think should be the default set. You can also change the columns in a dynamic manner using filters.

This post will cover these various different mechanisms.

Temporarily alter the list shown

When looking at a list of objects you can change the columns that are displayed by selecting the Options -> Alter List… item from the context menu.

MO71 Alter List Menu

This will bring up a dialog where you can locate the additional columns you want to display. So I’ve got a list of queues, with some cluster queues and I want to see the Cluster Queue Manager that hosts the cluster queues, so I locate the field Cluster Queue Manager Name (CLUSQMGR) in the right hand side of the window in the list of “Remaining Fields”, and move it to the “List Contents” by pressing the  <<  button. Then I can move its position in the columns on the left hand side using the up and down buttons, and press   OK   to complete the change.

MO71 Change Queue List attributes

Now you’ll see that your queue list has the additional column you selected. However, if you close the queue list dialog, and later open another queue list dialog, you’ll see that your alteration to the list of fields shown has been forgotten, it was a temporary change that you made.

Permanently alter the list for one queue manager

Following exactly the same process as above, with one small change, you can make the change permanent for that queue manager. On the dialog which allows you to change the columns shown, instead of just pressing   OK   to make the change, first press Apply All which applies the change to all instances of that particular list dialog for this queue manager, both those currently open, and any future invocations of that list dialog. This change is also remembered across a restart of the MO71 program.

MO71 Change Queue List attributes Apply All

Permanently alter the list for all queue managers

In essence, this mechanism is changing the defaults for list dialogs. If you add a new queue manager to MO71, it will pick up the default columns too.

Using the menu option View -> Set Default Lists -> Queue List… (or whichever list dialog you want to change), you will be presented with a very similar dialog to the one above, except instead of referring to a single queue manager in the window title, it will indicate that it is a “global” list.

MO71 Change global Queue List attributes

Pressing   OK   or  Apply  on the global change list dialog will set the new default and all queue managers that have not had their list changed by the above mechanisms will pick up these new defaults. Pressing Apply All on this dialog will set all queue managers to use this list instead of anything that may have previously been altered by the above mechanisms. Because this is a ‘destructive’ setting (i.e. you lose previous set up you might have done), there is a confirmation dialog for this change. This change is also remembered across a restart of the MO71 program.

MO71 Change global Queue List attributes Confirmation

Changing columns in a filter

You can also change the column display from within a filter. This can particularly useful when creating pre-defined dialogs. Especially if you want to have several different ‘default’ sets of columns.

This can be done in two ways. Firstly by adding a ‘#’ character after a keyword or user variable name, to show it as a column on the end of the display. The example below has a filter which creates a user variable called “Fullness” and as a result of the ‘#’ character on the end, also displays that as a column.

MO71 Fullness column

The other way to manipulate columns from within a filter is to use the showcol and hidecol functions. This is very useful in a pre-defined dialog, allowing you to change the default set of columns to exactly what you need for this dialog. You might, for example, have several different queue lists, one for cluster queues, one for transmission queues, and one for dead-letter queues across all your queue managers. You can imagine wanting slightly different columns on display for each one.

The showcol function takes the MQSC spelling of the keyword and the column position, and the hidecol function just takes the keyword.

MO71 showcol hidecol

Heopfully now you can have exactly the columns you want on display in any list you are viewing. If you have any questions please leave a comment below, or get in touch.

If you don’t have a licence and would like to try out MO71 then send an email to and a 1-month trial licence will be sent to you.

MQEdit version 9.0.2 is released

MQGem Software is pleased to announce that a new version of MQEdit, our Live Parsing Editor for IBM MQ messages, is now available.

MQEdit already had formatters for standard MQ messages such as MQXQH, MQDLH and MQPCF and XML and EDIFACT messages.

This release adds new formatters for JSON, FIX and CSV (OFS) messages.

MQEdit Formatted JSON Customer Record

MQEdit Formatting a JSON Customer Record

You can tie these new formatters to your messages just as you do user formats. Given it’s most likely that these will have an MQ Format of MQSTR, you should tie the formatter to the queue name, as follows.

  formatter JSON;

Alternatively you can use the Formatter context menu when viewing a message to invoke the appropriate formatter.

MQEdit Formatter menu

MQEdit Formatter menu

You’ll also see another useful option in this menu, the “Contextual Newline”. This inserts the appropriate character into the message when you hit the enter key. Very useful for formats such as FIX where the newline character is the SOH (0x01) character.

The new version can be downloaded from the MQEdit Download Page. Any current licensed users of MQEdit can run the new version on their existing licence. If you don’t have a licence and would like to try out MQEdit then send an email to and a 1-month trial licence will be sent to you.

MO71 version 9.0.5 – Column Filters

MQGem Software is pleased to announce that a new version of MO71, our GUI Administrative tool for IBM MQ, is now available.

This release was created for one specific requested feature – Column Filters.

MO71 has a very powerful filtering capability already, but with power often comes complexity and some find this daunting to learn. The introduction of column filters allows for, very easy to use, filtering by columns, to reduce the amount of data you are looking at on a list dialog.

To use it, look in the column heading of a column in a list dialog, and you will see a new filter icon. Click on this icon and a filter dialog will pop-up. This dialog will look a little different depending on the type of attribute you are trying to filter. For strings, you can type in a string, or part of a string to match on; for integers you can provide a minimum and/or maximum; and for enumerated values, you can see all the possible values and select or deselect them.

MO71 Column Filters

The column filter dialog shows the number of each type

In the case of enumerated values, you also see a count of how many of each value there are in the current list dialog. This can be handy in itself without using any filtering!

Now I can reduce the amount of data shown in my list, by deselecting the values that I am not interested in at the moment.

MO71 Column Filtered

Use the check boxes to reduce what is shown

In case you forget that you have filtered the list, and wonder where your other objects are, there are two visual clues that filtering is currently in effect. Firstly, the icon in the column heading changes to show that a filter is active, and the count of objects displayed does not match the total number available as shown in the bottom right of the window.

MO71 Indication of Filtering

You can tell that your display is filtered

You can filter on several columns at once in a single dialog, and so if you later want to turn them all off, you can do so with one click, using either the context menu option, Options -> Remove Column Filters, or the toolbar button for the same.

The new version can be downloaded from the MO71 Download Page. Any current licensed users of MO71 can run the new version on their existing licence. If you don’t have a licence and would like to try out MO71 then send an email to and a 1-month trial licence will be sent to you.

MQSCX version 9.0.1 is released

MQGem Software is pleased to announce that a new version of MQSCX, our command line extended MQSC tool for IBM MQ, is now available.

This is a mini-release, specifically to release the first of the below features. But then we added a couple more things at the same time!

Issue RESET QSTATS as an MQSC command

Sparked by a conversation on we were intrigued when one user asked us whether it would be possible to provide RESET QSTATS as an MQSC command on the distributed platforms using MQSCX. Turns out it is possible!

Support certlabl on connect

The =conn command provides for a number of client channel configuration attributes, and now certlabl is among them.

The Any Key

Press Any Key?

Provide a simple way of getting user key input

This version introduces the getkey() function which will return the next key pressed by the user. This can be useful to, for example, navigate your way through a script menu, or to exit from a while loop in a script at the user’s command.

The new version can be downloaded from the MQSCX Download Page. Any current licensed users of MQSCX can run the new version on their existing licence. If you don’t have a licence and would like to try out MQSCX then send a note to and a 1-month trial licence will be sent to you.

QLOAD version 9.0.2 – Required Rate

MQGem Software is pleased to announce that a new version of QLOAD, our queue load/unload tool for IBM MQ, is now available.

This release was created for one specific customer requested feature which we call Required Rate Processing.

Required Rate

QLOAD Source to TargetThis feature allows you to test the speed that your system, or specific applications in your system, can process messages. You may have a target rate you need to be able to achieve, and you can use QLOAD to send messages through the system at that rate to see whether the system (the channels and the applications) can keep up. You may for example have TLS channels; or message compression; or AMS message level encryption applied to the messages which are of course, changing the performance profile of the system. With QLOAD you can test the rate using exactly the same shape and size of messages that you will use in the production environment.

Starting with a queue that contains a representative selection of example messages, you can then use QLOAD to copy those messages and inject them into the system at the rate you require. In the example that follows, the required rate is 500 messages/second and the test is to run for 10 minutes.

qload -m MQG1 -i EXAMPLE.MSGS -o TARGET.QUEUE -R500:600

QLOAD will browse the EXAMPLE.MSGS queue and send copies of those messages to the TARGET.QUEUE. When it reaches the end of the EXAMPLE.MSGS then it will go back to the beginning of the queue and send them again, as often as required until the test ends. You can just have a single message on the queue and send it repeatedly, but to offset the cost of resetting the browse, it’s better to have 10 or more messages on the queue. In reality all your messages will not be the same, so a good selection of example messages is certainly worth collecting.

If you want the test to run until you tell it to stop, you can indicate that you want it to run indefinitely with an asterisk for the duration.

qload -m MQG1 -i EXAMPLE.MSGS -o TARGET.QUEUE -R500:*

There are two other ways you might use this feature.

Discover Achievable Rate

Instead of telling QLOAD to run at a certain rate, you might instead want to discover what your highest rate could be.

To run QLOAD in this way, you use a command like this:-


And you will see output like the following, as QLOAD ramps up the rate.

Monitoring depth of queue 'TARGET.QUEUE'
Message Rate 802 msgs/sec
Message Rate 5200 msgs/sec
Message Rate 5548 msgs/sec
Message Rate 5516 msgs/sec
Message Rate 5409 msgs/sec
Message Rate 5566 msgs/sec
Message Rate 5503 msgs/sec

It does this by monitoring the depth of the target queue, which might be a transmission queue being read by a channel, or it might be an application queue being read either by the read application or by another instance of QLOAD acting as a sink.

qload -I TARGET.QUEUE -f null -w600

Trickle Feed the contents of a queue

So far you’ve seen QLOAD copy example messages from a source queue and inject them into the system over and over until the duration of the test is complete. Alternatively though, you could use this feature to move messages from a side queue (the contents of a batch run, or messages from a backout queue or a Dead-letter queue) back into the main system. If you have a large depth of these messages you may not want to load them back into the application queue all at once, since you know deep queues hurt performance. So instead you can trickle feed them into the system using QLOAD.


The new version can be downloaded from the QLOAD Download Page. Any current licensed users of QLOAD can run the new version on their existing licence. If you don’t have a licence and would like to try out QLOAD then send an email to and a 1-month trial licence will be sent to you.