How to take thread dump in BPM Enterprise 5.x
book
Article ID: KB0071546
calendar_today
Updated On:
TIBCO BPM Enterprise (formerly TIBCO ActiveMatrix BPM)
5.0.0, 5.1.0, 5.2.0, 5.2.1, 5.2.2, 5.3.0
Show More
Show Less
Description
There may be a need to take a thread dump of the BPM process. See the resolution section for the steps to take a thread dump of the BPM process running in a Kubernetes node.
Issue/Introduction
This article explains how to take Java thread dumps in BPM Enterprise 5.x
Environment
All supported Kubernetes environments
Resolution
1. Logon to the control plane node machine. 2. Get the BPM pod name: >kubectl get pods -n=<BPM namespace> Example:NAME READY STATUS RESTARTS AGE bpm-deployment-7f4b9c8d95-7k76z 1/1 Running 3 (4d16h ago) 15d 3. Get the shell prompt using the command: >kubectl exec --stdin --tty <BPM pod name> -- /bin/bash Example:bpmuser@bpm-deployment-7f4b9c8d95-7k76z:/$ 4. From the shell prompt of the pod, list the processes. The BPM container doesn't have the 'ps' so use /proc to get the list of processes. The following command can be used to get the list of processes: for prc in /proc/*/cmdline; { (printf "$prc "; cat -A "$prc") | sed 's/\^@/ /g;s|/proc/||;s|/cmdline||'; echo; } Example:bpmuser@bpm-deployment-7f4b9c8d95-7k76z:/$ for prc in /proc/*/cmdline; { (printf "$prc "; cat -A "$prc") | sed 's/\^@/ /g;s|/proc/||;s|/cmdline||'; echo; } 1 /bin/bash /bin/bpmms 116 /opt/java/jdk-minimal/bin/java -Xmx4G -server -XX:+UseG1GC -XX:SurvivorRatio=128 -XX:MaxTenuringThreshold=0 -XX:+UseTLAB -XX:+CMSClassUnloadingEnabled -Djava.security.egd=file:///dev/urandom -Dspring.jdbc.getParameterType.ignore=true -Dcom.sun.jndi.ldap.connect.pool.maxsize=50 -Dcom.sun.jndi.ldap.connect.pool.prefsize=25 -Dcom.sun.jndi.ldap.connect.pool.initsize=10 --add-reads=java.xml=java.logging --add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED --patch-module java.base=lib/endorsed/org.apache.karaf.specs.locator-4.2.11.jar --patch-module java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-4.2.11.jar --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.naming/javax.naming.spi=ALL-UNNAMED --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.file=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.ftp=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-exports=java.base/sun.net.www.content.text=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED --add-exports java.security.sasl/com.sun.security.sasl=ALL-UNNAMED -Dkaraf.instances=/opt/tibco/tibco-karaf-1.0.0/instances -Dkaraf.home=/opt/tibco/tibco-karaf-1.0.0 -Dkaraf.base=/opt/tibco/tibco-karaf-1.0.0 -Dkaraf.data=/opt/tibco/tibco-karaf-1.0.0/data -Dkaraf.etc=/opt/tibco/tibco-karaf-1.0.0/etc -Dkaraf.log=/opt/tibco/tibco-karaf-1.0.0/data/log -Dkaraf.restart.jvm.supported=true -Djava.io.tmpdir=/opt/tibco/tibco-karaf-1.0.0/data/tmp -Djava.util.logging.config.file=/opt/tibco/tibco-karaf-1.0.0/etc/java.util.logging.properties -Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true -Dkaraf.log.console=ALL -classpath /opt/tibco/tibco-karaf-1.0.0/lib/boot/opendmk_jmxremote_optional_jar-1.0-b01-ea.jar:/opt/tibco/tibco-karaf-1.0.0/lib/boot/org.apache.karaf.diagnostic.boot-4.2.11.jar:/opt/tibco/tibco-karaf-1.0.0/lib/boot/org.apache.karaf.jaas.boot-4.2.11.jar:/opt/tibco/tibco-karaf-1.0.0/lib/boot/org.apache.karaf.main-4.2.11.jar:/opt/tibco/tibco-karaf-1.0.0/lib/boot/org.apache.karaf.specs.activator-4.2.11.jar:/opt/tibco/tibco-karaf-1.0.0/lib/boot/osgi.core-6.0.0.jar:/opt/tibco/tibco-karaf-1.0.0/lib/jdk9plus/istack-commons-runtime-3.0.10.jar:/opt/tibco/tibco-karaf-1.0.0/lib/jdk9plus/jakarta.xml.bind-api-2.3.3.jar:/opt/tibco/tibco-karaf-1.0.0/lib/jdk9plus/javax.activation-1.2.0.jar:/opt/tibco/tibco-karaf-1.0.0/lib/jdk9plus/javax.annotation-api-1.3.1.jar:/opt/tibco/tibco-karaf-1.0.0/lib/jdk9plus/jaxb-runtime-2.3.3.jar:/opt/tibco/tibco-karaf-1.0.0/lib/jdk9plus/txw2-2.3.3.jar org.apache.karaf.main.Main 71 /bin/sh /opt/tibco/tibco-karaf-1.0.0/bin/karaf clean run 9498 /bin/bash self cat -A /proc/self/cmdline 5. From the list of running processes, identify the process id for BPM. In the above example, it is '116'. 6. Take the thread dump using kill -3. The thread dump will be logged into the pod log. Example: bpmuser@bpm-deployment-7f4b9c8d95-7k76z:/$ kill -3 116 To take more thread dumps repeat the above command. 7. Exit from pod shell: Example:bpmuser@bpm-deployment-7f4b9c8d95-7k76z:/$ exit 8. Download the pod log using a command like: >kubectl logs <BPM pod name> > <file path/name of your choice> Example:>kubectl logs bpm-deployment-7f4b9c8d95-7k76z > /tmp/thread-dump.log 9. The pod log will have the thread dump starting from:Full thread dump OpenJDK 64-Bit Server VM (11.0.16+8 mixed mode):
Additional Information
https://kubernetes.io/docs/tasks/debug/debug-application/get-shell-running-container/
Feedback
thumb_up
Yes
thumb_down
No