How To
Summary
The WebSphere Application Server Performance Tuning Toolkit (PTT) is an Eclipse-based GUI tool to access live Traditional WebSphere Application Server (tWAS) Performance Monitoring Infrastructure (PMI) data. The tool is provided as is without any warranty or support.
Steps
- Download:
- Windows: https://public.dhe.ibm.com/software/websphere/appserv/support/tools/ptt/com.ibm.ptt-win32.win32.x86_64_V1.0.20200908.zip
- Linux: https://public.dhe.ibm.com/software/websphere/appserv/support/tools/ptt/com.ibm.ptt-linux.gtk.x86_64_V1.0.20200908.tar.gz
- macOS: https://public.dhe.ibm.com/software/websphere/appserv/support/tools/ptt/com.ibm.ptt-macosx.cocoa.x86_64_V1.0.20200908.tar.gz
- Before extracting, open Terminal and run: xattr -d com.apple.quarantine com.ibm.ptt-macosx*
- Ensure Java 8 (64-bit) is on your PATH or create a "jre" directory under the PTT folder and copy a Java installation into it. Java 11 or higher will not work.
- Start PTT by double clicking on ptt.exe/ptt/Eclipse.app, or from the terminal to show console output:
- Windows: ptt.exe
- Linux: ./ptt
- macOS: ./Eclipse.app/Contents/MacOS/ptt
- Click add a new host and provide the details of the deployment manager or application server, including its SOAP port.
- Select the host and click connect to selected host.
- Click yes to monitor all servers.
- In the topology view, click the target server and click open monitor page.
- The PMI data will update live, approximately every 60 seconds or so.
Additional Information
Important Notes
- PTT is provided as is without any warranty or support.
- There is a self-placed lab that has PTT installed: WebSphere Application Server Troubleshooting and Performance Lab on Docker.
- Note that tuning assistance is not in the scope of IBM support. If you need tuning assistance, please contact your IBM account representative to set up a paid services engagement with a skilled performance tuning resource.
Revision History
- V1.0.20200908
- Fix report generation.
- Fix preference retrieval.
- V1.0.20200728
- Add error details to connection exceptions.
- Add support for an optional -Dinsecure=true option that avoids "peer not authenticated" and hostname verification errors when the normal solutions are difficult or infeasible.
- V1.0.20200701_2
- Fix error on Windows: javax.net.ssl.SSLException: SSLSocketFactory is null. This can occur if javax.net.ssl.SSLSocketFactory.getDefault() is called to create a socket and javax.net.ssl.* properties are not set.
- Set -Dcom.ibm.ssl.evaluateHost=false by default
- V1.0.20200630_4
- Allow using OpenJDK in addition to IBM Java
- V1.0.20200629
- Make debugging easier
- V1.0.20200624
- Create 64-bit builds for Windows, Linux, and macOS on top of a more modern Eclipse 2020-06.
Diagnostics
If you have a problem, perform the following steps to gather diagnostics:
-
On Windows, copy ptt.ini to eclipse.ini and edit eclipse.ini. On Linux, edit ptt.ini. On macOS, edit Eclipse.app/Contents/Eclipse/ptt.ini:
- Change the following line:
-Dorg.apache.soap.debug=false
To this:
-Dorg.apache.soap.debug=true
-
Change the following line:
-Djavax.net.debug=
To this:
-Djavax.net.debug=all
- Change the following line:
-
Edit TraceSettings.txt (on macOS, Eclipse.app/Contents/Eclipse/TraceSettings.txt):
-
Change the following line:
#*=all=enabled
To this:
*=all=enabled
-
-
Open a command prompt or terminal and start PTT as follows:
Windows:
C:\Users\name\> cd Downloads\PTT
C:\Users\name\Downloads\PTT> .\eclipsec.exe -debug -consoleLog > ptttrace.log 2>&1
macOS:
% cd Downloads/PTT/Eclipse.app/Contents/MacOS
% ./ptt -debug -consoleLog > ptttrace.log 2>&1
Linux:
$ cd Downloads/PTT
$ ./ptt -debug -consoleLog > ptttrace.log 2>&1 -
Reproduce the problem and close PTT
-
Send ptttrace.log and adminclient.log (on macOS, the files are in ./Eclipse.app/Contents/MacOS/)
Known Issues
- Symptom:
[SOAPException: faultCode=SOAP-ENV:Client; msg=Error making SOAP call: java.net.SocketException: java.lang.ClassNotFoundException: com.ibm.websphere.ssl.protocol.SSLSocketFactory; targetException=java.lang.IllegalArgumentException: Error making SOAP call: java.net.SocketException: java.lang.ClassNotFoundException: com.ibm.websphere.ssl.protocol.SSLSocketFactory]
Solution 1: Launch PTT with IBM Java 8 64-bit (see #4 below)
or
Solution 2:
2a. Edit ptt.ini (on macOS, Eclipse.app/Contents/Eclipse/ptt.ini)
2b. Add to the bottom and replace PTTDIRECTORY with the absolute path to the PTT installation directory (on macOS, .../Eclipse.app/Contents/Eclipse/):
-Djava.security.properties=PTTDIRECTORY/securityoverride.properties
-Djavax.net.ssl.keyStore=PTTDIRECTORY/DummyClientKeyFile.jks
-Djavax.net.ssl.keyStorePassword=WebAS
-Djavax.net.ssl.trustStore=PTTDIRECTORY/DummyClientTrustFile.jks
-Djavax.net.ssl.trustStorePassword=WebAS
- Symptom:
[SOAPException: faultCode=SOAP-ENV:Client; msg=Error making SOAP call: javax.net.ssl.SSLException: hostname in certificate didn't match: <127.0.0.1> != <localhost>; targetException=java.lang.IllegalArgumentException: Error making SOAP call: javax.net.ssl.SSLException: hostname in certificate didn't match: <localhost> != <myserver>]
Solution 1: Edit the host in PTT and change the Hostname to what is specified in the second set of <>'s in the error message above (in this example, myserver).
or
Solution 2: If you're willing to run without hostname verification, edit ptt.ini (on macOS, Eclipse.app/Contents/Eclipse/ptt.ini) and add:
-Dinsecure=true -
Symptom:Caused by: [SOAPException: faultCode=SOAP-ENV:Client; msg=Error making SOAP call: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated; targetException=java.lang.IllegalArgumentException: Error making SOAP call: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated]
Solution 1: Download the certificate from WAS and add it to PTT's trust store (DummyClientTrustFile.jks). The DummyClientTrustFile.jks is in a subdirectory of PTT such as configuration/org.eclipse.osgi/bundles/5/1/.cp/etc/. Example importing on POSIX-based systems (replace localhost:8880 with your WAS host and SOAP port):
echo -n | openssl s_client -connect localhost:8880 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > was.cert
keytool -importcert -alias "was" -file was.cert -keystore DummyClientTrustFile.jks -storepass WebAS
or
Solution 2: If you're willing to run without certificate verification, edit ptt.ini (on macOS, Eclipse.app/Contents/Eclipse/ptt.ini) and add:
-Dinsecure=true -
For various connection issues, it may help for PTT to run with IBM Java instead of Oracle/OpenJDK/HotSpot/OpenJ9:
-
On Windows, download IBM Java 8 64-bit from here: https://www.ibm.com/support/pages/java-sdk-downloads and then extract it and copy the JDK folder into the PTT folder and then rename it to jre and restart
-
-
To connect using TLS 1.2, follow the instructions for configuring administrative clients: https://www.ibm.com/support/knowledgecenter/SSAW57_9.0.0/com.ibm.websphere.nd.multiplatform.doc/ae/tsec_config_strictsp300.html. PTT dynamically generates files in a directory under the installation folder after the first connection is attempted. For example: configuration/org.eclipse.osgi/bundles/5/1/.cp/etc/. The TLSv1.2 changes are only needed in the ssl.client.props file.
-
Symptom:java.lang.NoClassDefFoundError: org.omg.CORBA.UserException
at java.base/java.lang.ClassLoader.defineClassImpl(Native Method)
at java.base/java.lang.ClassLoader.defineClassInternal(ClassLoader.java:481)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:442)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:294)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:718)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:641)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:609)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:589)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:568)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:346)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:398)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:477)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:171)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1083)
at com.ibm.ISecurityUtilityImpl.PasswordUtil.decode(PasswordUtil.java:202)
at com.ibm.ws.ssl.config.SSLConfig.decodePassword(SSLConfig.java:436)
at com.ibm.websphere.management.AdminClientFactory.decodePasswordsAndExpandVariables(AdminClientFactory.java:1355)
at com.ibm.websphere.management.AdminClientFactory.loadPropertiesFromFile(AdminClientFactory.java:1229)
at com.ibm.websphere.management.AdminClientFactory.access$1(AdminClientFactory.java:1213)
at com.ibm.websphere.management.AdminClientFactory$2.run(AdminClientFactory.java:392)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
at com.ibm.websphere.management.AdminClientFactory.createAdminClientPrivileged(AdminClientFactory.java:390)
at com.ibm.websphere.management.AdminClientFactory.access$0(AdminClientFactory.java:228)
at com.ibm.websphere.management.AdminClientFactory$1.run(AdminClientFactory.java:210)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
at com.ibm.websphere.management.AdminClientFactory.createAdminClient(AdminClientFactory.java:206)
at com.ibm.perf.data.collector.DataCollector.doConnect(DataCollector.java:1868)
at com.ibm.perf.ui.Controller.connectToHost(Controller.java:186)
at com.ibm.perf.ui.handlers.ConnectToHostHandler$1.run(ConnectToHostHandler.java:58)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.ClassNotFoundException: org.omg.CORBA.UserException cannot be found by com.ibm.ptt.plugin_0.1.0.qualifier
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:516)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:171)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1083)
Solution: This is caused by Java >= 11. Instead, use Java 8. Hopefully one day we can get newer versions of Java to work.
Contact
For details, contact Kevin Grigorenko (kevin.grigorenko@us.ibm.com).
Document Location
Worldwide
[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"ARM Category":[{"code":"a8m50000000L2DEAA0","label":"PMI"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Version(s)","Line of Business":{"code":"LOB15","label":"Integration"}}]
Document Information
Modified date:
20 January 2021
UID
ibm16205945