Wednesday, 1 November 2017

IBM WebSphere Application Server - Tuning and Monitoring and Tuning - IBM Health Center

This will be the first of a number of posts, as I'm currently engaged with a few WAS performance gigs, so am refreshing my memory on some of the tooling.

This time around, I'm looking at the Health Centre, which has been part of IBM Java since version 5.


Health Center is a very low overhead monitoring tool. It runs alongside an IBM Java application with a very small impact on the application's performance (less than 1%). Health Center monitors several application areas, using the information to provide recommendations and analysis that help you improve the performance and efficiency of your application. Health Center can save the data obtained from monitoring an application and load it again for analysis at a later date.

The plan is to turn on the Health Centre "agent" within a Java Virtual Machine (JVM) underlying IBM BPM Advanced, specifically the AppCluster member, and then analyse the output using Eclipse.

I'm running WAS 8.5.5.12 and BPM 8.6, on IBM Java 8.

Whilst the HC agent is part of IBM Java, the UI tool is part of the IBM Support Assistant, and can be installed into Eclipse.

I'm using the latest Eclipse Oxygen and I simply searched for the Health Centre tool within the Eclipse Marketplace, by searching for the word "health", which returned one hit: -


Having installed the plugin, and restarted Eclipse, I then added the necessary instrumentation to my BPM JVM, changing the Generic JVM Arguments from: -

${IBMSCMX} ${IBMGCPOLICY_GENCON} ${IBMJITPMC} -Xmns256m -Xmnx768m -Xgc:preferredHeapBase=0x100000000 -Xdisableexplicitgc -Xss2048k -Dsun.net.http.allowRestrictedHeaders=true -Declipse.bundle.setTCCL=false

to: -

${IBMSCMX} ${IBMGCPOLICY_GENCON} ${IBMJITPMC} -Xmns256m -Xmnx768m -Xgc:preferredHeapBase=0x100000000 -Xdisableexplicitgc -Xss2048k -Dsun.net.http.allowRestrictedHeaders=true -Declipse.bundle.setTCCL=false -Xhealthcenter

I then restarted the AppCluster, and monitored the SystemOut.log file as the JVM restarted: -

tail -f /opt/ibm/WebSphereProfiles/AppSrv01/logs/AppClusterMember1/SystemOut.log

[01/11/17 12:47:37:314 GMT] 00000001 WsServerImpl  A   WSVR0001I: Server AppClusterMember1 open for e-business


In Eclipse, I established a new Connection: -






As can be seen, this iterated through a range of ports, starting at 1972 and running to 2072.

Alas, I ended up with this: -


and: -


Following the advice in the "Unable to contact agent" dialogue, I changed the Generic JVM Arguments for the AppCluster member from: -

${IBMSCMX} ${IBMGCPOLICY_GENCON} ${IBMJITPMC} -Xmns256m -Xmnx768m -Xgc:preferredHeapBase=0x100000000 -Xdisableexplicitgc -Xss2048k -Dsun.net.http.allowRestrictedHeaders=true -Declipse.bundle.setTCCL=false -Xhealthcenter

to: -

${IBMSCMX} ${IBMGCPOLICY_GENCON} ${IBMJITPMC} -Xmns256m -Xmnx768m -Xgc:preferredHeapBase=0x100000000 -Xdisableexplicitgc -Xss2048k -Dsun.net.http.allowRestrictedHeaders=true -Declipse.bundle.setTCCL=false -Xhealthcenter:transport=jrmp

For the record, I'm running Eclipse Oxygen on macOS, and am thus using Oracle's Java 8, rather than an IBM JRE.

I restarted the AppCluster ….

… and then re-tried the New Connection process again

This time around, I got this: -


and this: -


Now I have full access to the various HC metrics from the AppCluster JVM e.g.




etc.

Which is nice :-)

For the record, there's some useful insight about the HC Monitoring Agent here: -


Hope this helps.

No comments:

Note to self - use kubectl to query images in a pod or deployment

In both cases, we use JSON ... For a deployment, we can do this: - kubectl get deployment foobar --namespace snafu --output jsonpath="{...