Sorry it took me so long to post response. We found solution to clear our large WebSphere files. The process took me number of steps to identify the problem.
Our company purchased new Warehousing Application System. JMS queues are used to send data from our mainframe system to new Warehouse System. Our JMS Queues are configured on AIX 7 and WebSphere 8.0.0.2. JMS is using the SIB (System Integration Bus). I found scripts to query the JMS Queue depth, but I had problems putting the pieces together. These were the steps.
- Enable PMI message process counters
- Created Jython scripts to monitoring JMS queue depth
- Installed Hermes to browse messages in the JMS queues.
Message processor counters. The service integration bus messages processor counters are part of the performance monitoring infrastructure (PMI), which provides server-side monitoring and client-side API to retrieve performance information. These counters need to be enabled to collect message queue depth.
Signon to the WebSphere Console. Enable PMI to collection message queue depth
Performance Monitoring Infrastructure (PMI) > wmserver > Custom monitoring level
- SIB Service
- SIB Messaging Engines
- *
- Destinations
- Queues
- QueueStats.AvailableMessageCount
- QueueStats.UnavailableMessageCount
My first jython scripts failed. I was using the wrong port number. My scripts work using SOAP_CONNECTOR_ADDRESS port number. Found this jython script to list the ports being used by WebSphere.
printports.sh
/manh/3rdparty/swtools/WebSphere8/AppServer/bin/wsadmin.sh -conntype SOAP -host mlwlms20.woolworth.com -port 11035 -username system -password password -lang jython -f /apps/scope/wms/utilities/scripts/printports.py
printports.py
formatString = '''
Node: %s
Server: %s
Port | EndPoint Name
------+---------------'''
for node in AdminConfig.list( 'Node' ).splitlines() :
nodeName = AdminConfig.showAttribute( node, 'name' )
for se in AdminConfig.list( 'ServerEntry', node).splitlines() :
serverName = AdminConfig.showAttribute( se, 'serverName' )
print formatString % (nodeName, serverName )
seps = AdminConfig.showAttribute( se, 'specialEndpoints' )
for sep in seps[ 1:-1 ].split( ' ' ) :
ep = AdminConfig.showAttribute(sep,'endPoint')
port = AdminConfig.showAttribute(ep,'port')
name = AdminConfig.showAttribute(sep,'endPointName')
print '%5d | %s' % (port, name)
print
Print Port Results
Node: mlwlms20Node02
Server: server1
Port | EndPoint Name
------+---------------
11034 | BOOTSTRAP_ADDRESS
11035 | SOAP_CONNECTOR_ADDRESS
11040 | ORB_LISTENER_ADDRESS
11037 | SAS_SSL_SERVERAUTH_LISTENER_ADDRESS
11038 | CSIV2_SSL_SERVERAUTH_LISTENER_ADDRESS
11039 | CSIV2_SSL_MUTUALAUTH_LISTENER_ADDRESS
11031 | WC_adminhost
11030 | WC_defaulthost
11041 | DCS_UNICAST_ADDRESS
11033 | WC_adminhost_secure
11032 | WC_defaulthost_secure
11046 | SIP_DEFAULTHOST
11047 | SIP_DEFAULTHOST_SECURE
11042 | SIB_ENDPOINT_ADDRESS
11043 | SIB_ENDPOINT_SECURE_ADDRESS
11044 | SIB_MQ_ENDPOINT_ADDRESS
11045 | SIB_MQ_ENDPOINT_SECURE_ADDRESS
11036 | IPC_CONNECTOR_ADDRESS
Node: mlwlms20Node02
Server: wmserver
Port | EndPoint Name
------+---------------
11004 | BOOTSTRAP_ADDRESS
11005 | SOAP_CONNECTOR_ADDRESS
11014 | ORB_LISTENER_ADDRESS
11010 | SAS_SSL_SERVERAUTH_LISTENER_ADDRESS
11011 | CSIV2_SSL_SERVERAUTH_LISTENER_ADDRESS
11012 | CSIV2_SSL_MUTUALAUTH_LISTENER_ADDRESS
11002 | WC_adminhost
11000 | WC_defaulthost
11013 | DCS_UNICAST_ADDRESS
11003 | WC_adminhost_secure
11001 | WC_defaulthost_secure
11015 | SIP_DEFAULTHOST
11016 | SIP_DEFAULTHOST_SECURE
11017 | IPC_CONNECTOR_ADDRESS
11006 | SIB_ENDPOINT_ADDRESS
11007 | SIB_ENDPOINT_SECURE_ADDRESS
11008 | SIB_MQ_ENDPOINT_ADDRESS
11009 | SIB_MQ_ENDPOINT_SECURE_ADDRESS
These scripts will list the JMS queues
alljmsqueues.sh
/manh/3rdparty/swtools/WebSphere8/AppServer/bin/wsadmin.sh -conntype SOAP -host mlwlms20.woolworth.com -port 11005 -username system -password password -lang jython –tracefile /apps/scope/wms/utilities/scripts/logs/alljmsqueues_trace.log -appendtrace false -f /apps/scope/wms/utilities/scripts/alljmsqueues.py > /apps/scope/wms/utilities/scripts/logs/alljmsqueues.log
Script alljmsqueues.py
import time
import os
print "Start alljmsqueues.sh script ",time.ctime()
formatString = '''
Queue | Queue Depth | State | Threshold
------------------------------------------------+-------------+--------------+-----------'''
flag = 'N'
allqueues = AdminControl.queryNames('WebSphere:*,type=SIBQueuePoint').split('\n')
print formatString
for queue in allqueues:
identifier = AdminControl.getAttribute(queue,'identifier')
depth = AdminControl.getAttribute(queue,'depth')
state = AdminControl.getAttribute(queue,'state')
highMessageThreshold = AdminControl.getAttribute(queue,'highMessageThreshold')
print '%50s | %12s| %12s | %10s' % (identifier, depth, state, highMessageThreshold)
if depth '0':
flag = 'Y'
continue
if flag == 'Y':
cmd = 'mailx -s ' + '"QA All JMS Queues Depth"' + 'address@emailserver < /apps/scope/wms/utilities/scripts/logs/alljmsqueues.log'
os.system(cmd)
Partial results of alljmsqueues.py
WASX7209I: Connected to process "wmserver" on node mlwlms20Node02 using SOAP connector; The type of process is: UnManagedProcess
Start alljmsqueues.sh script Wed Oct 30 07:00:17 2013
Queue | Queue Depth | State | Threshold
---------------------------------------------------+----------------+----------------+ -------------
JMS.QUEUE.MA.LM.MASTER.IN | 0| ACTIVE | 50000
JMS.QUEUE.MA.LM.MASTER.OUT | 0| ACTIVE | 50000
JMS.QUEUE.MA.LM.RESPONSE.OUT | 0| ACTIVE | 50000
JMS.QUEUE.MA.LM.TRAN.IN | 0| ACTIVE | 50000
JMS.QUEUE.MA.LM.TRAN.OUT | 0| ACTIVE | 50000
JMS.QUEUE.MA.WM.MASTER.IN | 0| ACTIVE | 50000
JMS.QUEUE.MA.WM.MASTER.OUT | 1| ACTIVE | 50000
After all of this we did not find queue with large number of messages. There was queue with 30,000+ messages. We did not have utility to browse the messages in the JMS queue. We downloaded and installed Hermes JMS Browser 1.15. After the install Hermes fails to start. FYI there is typo in the hermes.bat file. Change no to not.
:typeHermesCfg
If no exist
Change to
If not exist
Hermes 1.15 started. Successfully configure session. Configuring Hermes was not easy for me. I have screen prints available. Hermes JMS Browser was use to looks at problem JMS queue. The queue was not the problem. The Jython scripts and Hermes gave us enough information to contact our vendor. The vendor gave us instruction to clear the big file. The solution was simple.
1. Login to App server and shutdown the application
2. Go to the WM JMS DB directory (Ex for QA - $cd /apps/scope/wms/profile-root/WM_JCKQ/databases/com.ibm.ws.sib )
3. Move all the contents of the above directory to a backup location (empty the com.ibm.ws.sib directory). This backup can be deleted later once changes are tested and verified.
4. Now start up the application and test. The restart of the system will rebuild the WebSphere Files.
The vendor Manhattan Assoicates said the large file (69GB) found in ../com.ibm.ws.sib directory were jms xml records that failed to update. The problem XML records have been fixed. We no longer have the large file.
Once per week this file is clear. I am still WebSphere newbie. Not sure if this solution will work for everybody.