This articles explains how to create a thread dump series, which can be a useful tool to investigate unexpected behaviour.
Instructions
On a virtual machine
Create a run script called jStackSeries.sh that looks as follows on your HiveMQ machine
#!/bin/bash if [ $# -eq 0 ]; then echo >&2 "Usage: jstackSeries <pid> <run_user> [ <count> [ <delay> ] ]" echo >&2 " Defaults: count = 10, delay = 0.5 (seconds)" exit 1 fi pid=$1 # required user=$2 # required count=${3:-10} # defaults to 10 times delay=${4:-0.5} # defaults to 0.5 seconds while [ $count -gt 0 ] do sudo -u $user jstack -l $pid >jstack.$pid.$(date +%H%M%S.%N) sleep $delay let count-- echo -n "." done
Find the HiveMQ run user <user> and process ID <pid> by running
ps aux | grep hivemq
Run the script as follows:
sh jStackSeries-docker.sh <pid> <user> 20
This will result in 20 files (filename: 'jstack.<pid>.<date>.N') being generated
Please pack these 20 files in a zip file and attach them to your HiveMQ Support issue
In docker
Create the following run run-script jstack-series.sh
#!/bin/bash if [ $# -eq 0 ]; then echo >&2 "Usage: jstackSeries [ <count> [ <delay> ] ]" echo >&2 " Defaults: count = 10, delay = 0.5 (seconds)" exit 1 fi count=${1:-20} # defaults to 10 times delay=${2:-0.5} # defaults to 0.5 seconds while [ $count -gt 0 ] do ./jattach 1 threaddump>jstack.$pid.$(date +%H%M%S.%N) sleep $delay let count-- echo -n "." done
Run the following inside your Docker container:
curl -L https://github.com/apangin/jattach/releases/download/v1.5/jattach > jattach && \ chmod +x jattach
Run the created script:
./jstack-series.sh
This will result in 20 files (filename: 'jstack.<pid>.<date>.N') being generated
Please pack these 20 files in a zip file and attach them to your HiveMQ Support issue
Make sure that you run the script with user that has the necessary permissions. (i.e. root or the HiveMQ run user)