<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Qlik Talend Data Integration: Using VisualVM to record Java issues in Official Support Articles</title>
    <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Talend-Data-Integration-Using-VisualVM-to-record-Java/ta-p/2151874</link>
    <description>&lt;P&gt;This article shows you how to collect information using VisualVM to determine what processes are running when an application is in a &lt;STRONG&gt;Not Responding&lt;/STRONG&gt; state.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Installation and startup&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Download the installer from the &lt;A href="https://visualvm.github.io/download.html" target="_blank" rel="noopener"&gt;VisualVM&lt;/A&gt; page (no installation is required).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Extract the zip file.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;.exe&lt;/STRONG&gt; file, located in the &lt;STRONG&gt;bin/&lt;/STRONG&gt; subfolder, start VisualVM. It should look similar to this:&lt;/P&gt;
&amp;nbsp;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcRq.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122871i9119E0169203049C/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcRq.png" alt="0EM3p000001jcRq.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Talend Studio appears as &lt;STRONG&gt;Local Application&lt;/STRONG&gt;, and Jobs appear as &lt;I&gt;projectName.jobName&lt;/I&gt;. Grayed-out applications are no longer running. Double-clicking an application opens a new tab where you can look into the details of that application.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Interpreting the Monitor and Sampler tabs&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Monitor&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;CPU Usage&lt;/STRONG&gt; speaks for itself. However, if you see a lot of &lt;STRONG&gt;GC activity&lt;/STRONG&gt;, that means the application is swapping and needs more memory. The memory chart on the right indicates this as well. The &lt;STRONG&gt;Heap size&lt;/STRONG&gt; is useful in determining how much memory the application needs. The &lt;STRONG&gt;Used heap&lt;/STRONG&gt; (marked with blue) is what the application is currently using.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcUV.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123333i1EC6B1E4F4DD0E03/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcUV.png" alt="0EM3p000001jcUV.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Perform GC&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Java relies on a garbage collector (GC) to clean up the memory. It holds objects that could be removed, but only removes them when you're at the &lt;STRONG&gt;Heap size&lt;/STRONG&gt; and &lt;STRONG&gt;Used heap&lt;/STRONG&gt; limits. &amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcZv.gif"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124098i7B976D801C485EB6/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcZv.gif" alt="0EM3p000001jcZv.gif" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The chart above shows an automatic GC (the big drop), and when GC had been performed (that small drop at the edge), also the CPU usage shows this activity.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;How much memory should you assign?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;It should be a delicate balance between having the garbage collector constantly running (too little memory) and having a lot of unused heap (too much memory). Having huge drops (90% to 10%) in the memory usage means there's a lot of extra memory allocated to the application. Generally speaking, not having enough memory has obvious signs, such as receiving &lt;STRONG&gt;OutOfMemory&lt;/STRONG&gt; errors from the application, compared to having unnecessary extra memory assigned to the application.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Sampler - Memory&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Use this chart to determine what objects are occupying the memory.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcry.gif"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122719iDA7867AF1F8E66DD/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcry.gif" alt="0EM3p000001jcry.gif" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Per thread allocations&lt;/STRONG&gt; using &lt;STRONG&gt;delta values&lt;/STRONG&gt; help you understand what threads are using the memory extensively. You can capture, save, and ship snapshots of the heap, but the delta value is not stored, so you'll need multiple snapshots. It is easier to take a screenshot of the Per thread allocations delta values than using Sampler - CPU to take snapshots.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Sampler - CPU&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Use this chart to understand why a program is hanging.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jd4s.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124048i4B3CA1F6D51845FF/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jd4s.png" alt="0EM3p000001jd4s.png" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;Total Time (CPU)&lt;/STRONG&gt; column shows what the CPU time is spent on and helps identify suspicious activity. You need to open each thread that shows interest. The example above displays the &lt;STRONG&gt;main&lt;/STRONG&gt; and four &lt;STRONG&gt;Output Stream Monitor&lt;/STRONG&gt; activities.&lt;/P&gt;
&lt;P&gt;The main thread after an hour of sampling looks like this:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdmp.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123259i5C82E7072FADD7FB/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdmp.png" alt="0EM3p000001jdmp.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notice that it is spending time on &lt;STRONG&gt;sleep&lt;/STRONG&gt; / &lt;STRONG&gt;loopIdle&lt;/STRONG&gt;, most likely because it is waiting for user input.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdpP.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122926iA1FC528ABDB7A92A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdpP.png" alt="0EM3p000001jdpP.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;Output Stream Monitor&lt;/STRONG&gt; is trying to read from a file:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdtg.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122817iB8D1E71B289D210D/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdtg.png" alt="0EM3p000001jdtg.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can use this information to find the root cause. Also, R&amp;amp;D can find what causing the issue and provide a fix.&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Collecting data&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;The profiling method allows you to collect data, then ship it using &lt;STRONG&gt;Profiler Snapshot&lt;/STRONG&gt;. Create a profile snapshot by performing the following steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Start sampling.&lt;/LI&gt;
&lt;LI&gt;Do some interaction.&lt;/LI&gt;
&lt;LI&gt;Create multiple snapshots (name and save them), for example, break a Studio startup into steps. Each requires some interaction before, so if possible, start the sampling before the user action, and stop after the application is responsive. The snapshots might be:
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Until the Project selection screen comes up&lt;/LI&gt;
&lt;LI&gt;Project login to Studio screen&lt;/LI&gt;
&lt;LI&gt;Switching to a different GIT branch&lt;/LI&gt;
&lt;LI&gt;Opening a Job and running it&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Finally, export the snapshots as .&lt;STRONG&gt;nps&lt;/STRONG&gt; files by right-clicking the snapshot and selecting &lt;STRONG&gt;Save As&lt;/STRONG&gt; or using the &lt;STRONG&gt;Save As&lt;/STRONG&gt; icon.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdvw.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123313i094E5DD9975646C7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdvw.png" alt="0EM3p000001jdvw.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Collecting data on Linux Servers (Talend Administration Console, Tomcat, JobServer, Nexus)&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;You can load Java Flight Recorder (JFR) results to VisualVM, and you can run JFR on Linux servers.&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Requirements&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;Make sure your Java is correct.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Oracle Java 8 it has this feature available.&lt;/LI&gt;
&lt;LI&gt;If you're using Zulu Java 8 or OpenJDK Java 8, then make sure you're on the latest version, as the JFR feature was only added in mid-2020.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The following command should be executable:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -version&lt;/PRE&gt;
&lt;P&gt;&lt;BR /&gt;If Java supports it, you will see:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H4ss.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123123iC1BED2B16837CDC7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H4ss.png" alt="0EM3p000002H4ss.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;If Java doesn't support it, it needs to be updated:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H4uy.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122456i70BE1DF3BF47299D/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H4uy.png" alt="0EM3p000002H4uy.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Setup&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;Enable JFR by adding the two parameters mentioned above as JVM parameters.&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;-XX:+UnlockCommercialFeatures -XX:+FlightRecorder&lt;/PRE&gt;
&lt;P&gt;In the case of Talend Administration Console, this is done in the &lt;STRONG&gt;setenv.sh&lt;/STRONG&gt; file; in other cases this can be done where the &lt;STRONG&gt;-Xms/-Xmx&lt;/STRONG&gt; parameters are set.&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Recording&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;By default, JFR is in a "sleeping" state and we need to activate it. This can be done using the JCMD utility:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;jcmd &amp;lt;PID&amp;gt; JFR.start name=tacRecording filename=/tmp/tacRecording.jfr&lt;/PRE&gt;
&lt;P&gt;&lt;BR /&gt;The PID can be obtained using &lt;STRONG&gt;ps aux&lt;/STRONG&gt; or by running the &lt;STRONG&gt;jcmd&lt;/STRONG&gt; command. In the case of Talend Administration Console, you need to look for the Catalina Bootstrap.&lt;BR /&gt;&lt;BR /&gt;You can stop data collection by running:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;jcmd &amp;lt;PID&amp;gt; JFR.stop name=tacRecording&lt;/PRE&gt;
&lt;P&gt;If done correctly, you'll see:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H532.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122974i595DB1A607A28D51/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H532.png" alt="0EM3p000002H532.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Problems&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;If Talend Administration Console is running with &lt;STRONG&gt;talenduser&lt;/STRONG&gt;, then JCMD has to be triggered with &lt;STRONG&gt;talenduser&lt;/STRONG&gt;. It can't be executed using sudo / root or it will display the following error:&lt;/P&gt;
&lt;P&gt;AttachNotSupportedException: Unable to open socket file: HotSpot VM not loaded&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H516.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124205iB5115D7F48DE3840/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H516.png" alt="0EM3p000002H516.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;User is correct but JFR is not enabled:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H52i.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124286i13D2939F5E5BCEC3/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H52i.png" alt="0EM3p000002H52i.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;(Start JFR, reproduce the issue, stop JFR, analyze the results with VisualVM.)&lt;BR /&gt;&lt;BR /&gt;If the user is part of multiple groups, use the &lt;STRONG&gt;-g&lt;/STRONG&gt; parameter to switch to the right group:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;su talenduser -g talendgroup&lt;/PRE&gt;
&lt;P&gt;There should be a file under &lt;STRONG&gt;/tmp&lt;/STRONG&gt; called &lt;STRONG&gt;.java_pid&amp;lt;&lt;I&gt;PID&lt;/I&gt;&amp;gt;&lt;/STRONG&gt; present for the process to be able to attach.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Questions, issues, and solutions&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Issue&lt;/STRONG&gt;: I can't see my applications.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution&lt;/STRONG&gt;: Try starting VisualVM with administrator rights.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Issue&lt;/STRONG&gt;: I get an error at startup for my Java version.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution&lt;/STRONG&gt;: If you're able to execute the steps in this article, then it's not an issue.&lt;/P&gt;</description>
    <pubDate>Mon, 29 Dec 2025 00:56:06 GMT</pubDate>
    <dc:creator>TalendSolutionExpert</dc:creator>
    <dc:date>2025-12-29T00:56:06Z</dc:date>
    <item>
      <title>Qlik Talend Data Integration: Using VisualVM to record Java issues</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Talend-Data-Integration-Using-VisualVM-to-record-Java/ta-p/2151874</link>
      <description>&lt;P&gt;This article shows you how to collect information using VisualVM to determine what processes are running when an application is in a &lt;STRONG&gt;Not Responding&lt;/STRONG&gt; state.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Installation and startup&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;P&gt;Download the installer from the &lt;A href="https://visualvm.github.io/download.html" target="_blank" rel="noopener"&gt;VisualVM&lt;/A&gt; page (no installation is required).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Extract the zip file.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Using the &lt;STRONG&gt;.exe&lt;/STRONG&gt; file, located in the &lt;STRONG&gt;bin/&lt;/STRONG&gt; subfolder, start VisualVM. It should look similar to this:&lt;/P&gt;
&amp;nbsp;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcRq.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122871i9119E0169203049C/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcRq.png" alt="0EM3p000001jcRq.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Talend Studio appears as &lt;STRONG&gt;Local Application&lt;/STRONG&gt;, and Jobs appear as &lt;I&gt;projectName.jobName&lt;/I&gt;. Grayed-out applications are no longer running. Double-clicking an application opens a new tab where you can look into the details of that application.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Interpreting the Monitor and Sampler tabs&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Monitor&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;CPU Usage&lt;/STRONG&gt; speaks for itself. However, if you see a lot of &lt;STRONG&gt;GC activity&lt;/STRONG&gt;, that means the application is swapping and needs more memory. The memory chart on the right indicates this as well. The &lt;STRONG&gt;Heap size&lt;/STRONG&gt; is useful in determining how much memory the application needs. The &lt;STRONG&gt;Used heap&lt;/STRONG&gt; (marked with blue) is what the application is currently using.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcUV.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123333i1EC6B1E4F4DD0E03/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcUV.png" alt="0EM3p000001jcUV.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Perform GC&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Java relies on a garbage collector (GC) to clean up the memory. It holds objects that could be removed, but only removes them when you're at the &lt;STRONG&gt;Heap size&lt;/STRONG&gt; and &lt;STRONG&gt;Used heap&lt;/STRONG&gt; limits. &amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcZv.gif"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124098i7B976D801C485EB6/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcZv.gif" alt="0EM3p000001jcZv.gif" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The chart above shows an automatic GC (the big drop), and when GC had been performed (that small drop at the edge), also the CPU usage shows this activity.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;How much memory should you assign?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;It should be a delicate balance between having the garbage collector constantly running (too little memory) and having a lot of unused heap (too much memory). Having huge drops (90% to 10%) in the memory usage means there's a lot of extra memory allocated to the application. Generally speaking, not having enough memory has obvious signs, such as receiving &lt;STRONG&gt;OutOfMemory&lt;/STRONG&gt; errors from the application, compared to having unnecessary extra memory assigned to the application.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Sampler - Memory&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Use this chart to determine what objects are occupying the memory.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jcry.gif"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122719iDA7867AF1F8E66DD/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jcry.gif" alt="0EM3p000001jcry.gif" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Per thread allocations&lt;/STRONG&gt; using &lt;STRONG&gt;delta values&lt;/STRONG&gt; help you understand what threads are using the memory extensively. You can capture, save, and ship snapshots of the heap, but the delta value is not stored, so you'll need multiple snapshots. It is easier to take a screenshot of the Per thread allocations delta values than using Sampler - CPU to take snapshots.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Sampler - CPU&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Use this chart to understand why a program is hanging.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jd4s.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124048i4B3CA1F6D51845FF/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jd4s.png" alt="0EM3p000001jd4s.png" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;Total Time (CPU)&lt;/STRONG&gt; column shows what the CPU time is spent on and helps identify suspicious activity. You need to open each thread that shows interest. The example above displays the &lt;STRONG&gt;main&lt;/STRONG&gt; and four &lt;STRONG&gt;Output Stream Monitor&lt;/STRONG&gt; activities.&lt;/P&gt;
&lt;P&gt;The main thread after an hour of sampling looks like this:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdmp.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123259i5C82E7072FADD7FB/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdmp.png" alt="0EM3p000001jdmp.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notice that it is spending time on &lt;STRONG&gt;sleep&lt;/STRONG&gt; / &lt;STRONG&gt;loopIdle&lt;/STRONG&gt;, most likely because it is waiting for user input.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdpP.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122926iA1FC528ABDB7A92A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdpP.png" alt="0EM3p000001jdpP.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;Output Stream Monitor&lt;/STRONG&gt; is trying to read from a file:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdtg.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122817iB8D1E71B289D210D/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdtg.png" alt="0EM3p000001jdtg.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can use this information to find the root cause. Also, R&amp;amp;D can find what causing the issue and provide a fix.&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Collecting data&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;The profiling method allows you to collect data, then ship it using &lt;STRONG&gt;Profiler Snapshot&lt;/STRONG&gt;. Create a profile snapshot by performing the following steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Start sampling.&lt;/LI&gt;
&lt;LI&gt;Do some interaction.&lt;/LI&gt;
&lt;LI&gt;Create multiple snapshots (name and save them), for example, break a Studio startup into steps. Each requires some interaction before, so if possible, start the sampling before the user action, and stop after the application is responsive. The snapshots might be:
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;Until the Project selection screen comes up&lt;/LI&gt;
&lt;LI&gt;Project login to Studio screen&lt;/LI&gt;
&lt;LI&gt;Switching to a different GIT branch&lt;/LI&gt;
&lt;LI&gt;Opening a Job and running it&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Finally, export the snapshots as .&lt;STRONG&gt;nps&lt;/STRONG&gt; files by right-clicking the snapshot and selecting &lt;STRONG&gt;Save As&lt;/STRONG&gt; or using the &lt;STRONG&gt;Save As&lt;/STRONG&gt; icon.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000001jdvw.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123313i094E5DD9975646C7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000001jdvw.png" alt="0EM3p000001jdvw.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Collecting data on Linux Servers (Talend Administration Console, Tomcat, JobServer, Nexus)&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;You can load Java Flight Recorder (JFR) results to VisualVM, and you can run JFR on Linux servers.&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Requirements&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;Make sure your Java is correct.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Oracle Java 8 it has this feature available.&lt;/LI&gt;
&lt;LI&gt;If you're using Zulu Java 8 or OpenJDK Java 8, then make sure you're on the latest version, as the JFR feature was only added in mid-2020.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The following command should be executable:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -version&lt;/PRE&gt;
&lt;P&gt;&lt;BR /&gt;If Java supports it, you will see:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H4ss.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/123123iC1BED2B16837CDC7/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H4ss.png" alt="0EM3p000002H4ss.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;If Java doesn't support it, it needs to be updated:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H4uy.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122456i70BE1DF3BF47299D/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H4uy.png" alt="0EM3p000002H4uy.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Setup&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;Enable JFR by adding the two parameters mentioned above as JVM parameters.&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;-XX:+UnlockCommercialFeatures -XX:+FlightRecorder&lt;/PRE&gt;
&lt;P&gt;In the case of Talend Administration Console, this is done in the &lt;STRONG&gt;setenv.sh&lt;/STRONG&gt; file; in other cases this can be done where the &lt;STRONG&gt;-Xms/-Xmx&lt;/STRONG&gt; parameters are set.&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Recording&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;By default, JFR is in a "sleeping" state and we need to activate it. This can be done using the JCMD utility:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;jcmd &amp;lt;PID&amp;gt; JFR.start name=tacRecording filename=/tmp/tacRecording.jfr&lt;/PRE&gt;
&lt;P&gt;&lt;BR /&gt;The PID can be obtained using &lt;STRONG&gt;ps aux&lt;/STRONG&gt; or by running the &lt;STRONG&gt;jcmd&lt;/STRONG&gt; command. In the case of Talend Administration Console, you need to look for the Catalina Bootstrap.&lt;BR /&gt;&lt;BR /&gt;You can stop data collection by running:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;jcmd &amp;lt;PID&amp;gt; JFR.stop name=tacRecording&lt;/PRE&gt;
&lt;P&gt;If done correctly, you'll see:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H532.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/122974i595DB1A607A28D51/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H532.png" alt="0EM3p000002H532.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Problems&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;If Talend Administration Console is running with &lt;STRONG&gt;talenduser&lt;/STRONG&gt;, then JCMD has to be triggered with &lt;STRONG&gt;talenduser&lt;/STRONG&gt;. It can't be executed using sudo / root or it will display the following error:&lt;/P&gt;
&lt;P&gt;AttachNotSupportedException: Unable to open socket file: HotSpot VM not loaded&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H516.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124205iB5115D7F48DE3840/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H516.png" alt="0EM3p000002H516.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;User is correct but JFR is not enabled:&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0EM3p000002H52i.png"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/124286i13D2939F5E5BCEC3/image-size/large?v=v2&amp;amp;px=999" role="button" title="0EM3p000002H52i.png" alt="0EM3p000002H52i.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;(Start JFR, reproduce the issue, stop JFR, analyze the results with VisualVM.)&lt;BR /&gt;&lt;BR /&gt;If the user is part of multiple groups, use the &lt;STRONG&gt;-g&lt;/STRONG&gt; parameter to switch to the right group:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;su talenduser -g talendgroup&lt;/PRE&gt;
&lt;P&gt;There should be a file under &lt;STRONG&gt;/tmp&lt;/STRONG&gt; called &lt;STRONG&gt;.java_pid&amp;lt;&lt;I&gt;PID&lt;/I&gt;&amp;gt;&lt;/STRONG&gt; present for the process to be able to attach.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Questions, issues, and solutions&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Issue&lt;/STRONG&gt;: I can't see my applications.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution&lt;/STRONG&gt;: Try starting VisualVM with administrator rights.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Issue&lt;/STRONG&gt;: I get an error at startup for my Java version.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution&lt;/STRONG&gt;: If you're able to execute the steps in this article, then it's not an issue.&lt;/P&gt;</description>
      <pubDate>Mon, 29 Dec 2025 00:56:06 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Talend-Data-Integration-Using-VisualVM-to-record-Java/ta-p/2151874</guid>
      <dc:creator>TalendSolutionExpert</dc:creator>
      <dc:date>2025-12-29T00:56:06Z</dc:date>
    </item>
  </channel>
</rss>

