Manually Generating a Thread Dump

If FishEye/Crucible stops responding or is showing poor performance, providing thread dumps to Support can help diagnose the problem.
Note: If you were asked by Atlassian technical support to create thread dumps please take at least six thread dumps – one every ten seconds for one minute so we can identify what the application is doing. Attach all generated files to the support ticket in addition to a Support Zip (the default Support Zip options includes fisheye.out which is the file to which thread dumps are sometimes written).

Generating a Thread Dump for Windows

Method 1: Windows scripts

We now have scripts for generating thread dumps externally on Windows. Download them from this Bitbucket Repository.

Method 2: CTRL+BREAK (only if FishEye/Crucible is running in a console window)

  1. Right click on the titlebar for the command console window where FishEye/Crucible is running to open the  Properties dialog box.

  2. Select the Layout tab.

  3. Under Screen Buffer Size, set the Height to 3000 and click OK.

  4. Press CTRL-BREAK on your keyboard.

  5. This will output the thread dump to the command console.

  6. Scroll back in the command console until you reach the line containing "Full thread dump".

  7. Right click the title bar and select Edit -> Mark.

  8. Highlight the entire text of the thread dump.

  9. Right click the title bar and select Edit -> Copy.

  10. Open a text editor and paste the thread dump and save the file.

Method 3 - VisualVM:

VisualVM is only provided as part of the Java Development Kit (JDK) distribution of Java.  The JDK is not packaged with FishEye/Crucible, and will need to be downloaded separately.  Your JAVA_HOME environment variable specifies which version of the Java Virtual Machine (JVM) FishEye/Crucible uses.  If no JAVA_HOME environment variable is set, FishEye/Crucible uses the Java Runtime Enviroment (JRE) version packaged with the application.

Scenario 1: FishEye/Crucible is using the JVM provided by the JDK - AND - FishEye/Crucible is running as a console application:

  1. Start VisualVM (<JDK installation directory>\bin\jvisualvm.exe)
  2. Select com.cenqua.fisheye.FishEyeCtl application in the left-hand pane under Local.
  3. Select the Threads tab in the right pane.
  4. Click Thread Dump.
  5. Select the Threads tab to return.

Scenario 2: FishEye/Crucible is not using the JVM provided by the JDK - AND - FishEye/Crucible is running as a console application:

  1. Stop FishEye/Crucible.
  2. Edit <FishEye/Crucible installation directory>\bin\fisheyectl.bat
  3. Add the following JMX parameters to the %_EXECCMD% %FISHEYE_OPTS% property (within the existing quotes)

    -Dcom.sun.management.jmxremote.port=6080 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
    You must choose a free port for JMX to bind to – this example uses port 6080
  4. Restart FishEye/Crucible.

  5. Start VisualVM: <JDK installation directory>\bin\jvisualvm.exe

  6. Select File > Add JMX Connection.

  7. Type: localhost:<your JMX port>

  8. Select com.cenqua.fisheye.FishEyeCtl application in the left-hand pane under Local.

  9. Select the Threads tab in the right pane.

  10. Click Thread Dump.

  11. Select the Threads tab to return.

Scenario 3: If FishEye/Crucible is running as a service:

  1. Stop FishEye.
  2. Go to Start > Apps (in Windows 8.1/Server 2012) or All Apps (in Windows 8) > Configure FishEye.
  3. Add the following JMX parameters to the service configuration on the Java tab under Java:

    -Dcom.sun.management.jmxremote.port=6080
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    You must choose a free port for JMX to bind to – this example uses port 608
  4. Click Apply, then OK

  5. Restart FishEye.

  6. Open Task Manager.

  7. Look for the Process Name Common Daemon Services Runner.

  8. Open the tree for the process and look for the sub-process "Atlassian FishEye". The PID for the process will be located under the PID column.

    If you are running multiple Atlassian products on the same server, each will have a separate Process Name Common Daemon Services Runner.
  9. Start VisualVM: <JDK installation directory>\bin\jvisualvm.exe

  10. Select File > Add JMX Connection.

  11. Type: localhost:<your JMX port> and click OK.

  12. Select localhost:<your JMX port> in the left-hand pane under "Local".

  13. Select the Threads tab in the right pane.

  14. Click Thread Dump.

  15. Select the Threads tab.

Generating a Thread Dump on Linux, including Solaris and other Unixes

Method 1 - jstack (available for JDK only, not for JRE installations):

  1. Find the process ID of FishEye/Crucible the JVM using the ps command.

    FC_PID=`ps aux | grep -i fisheye | grep -i java | awk  -F '[ ]*' '{print $2}'`;
  2. Run the following command 6 times with a 10 second interval:

    top -b -H -p $FC_PID -n 1 > fisheye_cpu_usage.`date +%s`.txt; jstack -l $FC_PID > fisheye_threads.`date +%s`.txt
  3. Look in the resulting CPU usage files (fisheye_cpu_usage.<timestamp>.txt) to identify which threads are consistently using a lot of CPU time.

  4. Take the PID of the top 10 threads which are using CPU time and convert them to Hexadecimal (Eg: 11159 becomes 0x2b97).
  5. Find the Hex values in the thread dump (fisheye_threads.<timestamp>.txt) files to figure out which threads are occupying CPU.

Method 2 - Kill Signal:

  1. Find the process ID of FishEye/Crucible the JVM using the ps command:

    ps aux | grep -i fisheye | grep -i java | awk  -F '[ ]*' '{print $2}'
  2. Run the following command 6 times with a 10 second interval:

    The kill -3 command will NOT terminate your FishEye/Crucible process.
    kill -3 <pid>
    The thread dump will be printed to FishEye/Crucible's standard output (fisheye.out).

Tools for analyzing thread dump files:

Was this helpful?

Thanks for your feedback!

Why was this unhelpful?

Have a question about this article?

See questions about this article

Powered by Confluence and Scroll Viewport