{"id":959,"date":"2012-03-30T20:15:00","date_gmt":"2012-03-30T20:15:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/jvm-how-to-analyze-thread-dump.html"},"modified":"2012-10-21T23:07:53","modified_gmt":"2012-10-21T23:07:53","slug":"jvm-how-to-analyze-thread-dump","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html","title":{"rendered":"JVM: How to analyze Thread Dump"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is the most important skillset to master for any individual involved in Java EE production support. The amount of information that you can derive from Thread Dump snapshots is often much beyond than what you can think of.<\/p>\n<p>My goal is to share with you my knowledge on Thread Dump analysis that I accumulated over the last 10 years e.g. hundreds of Thread Dump analysis cycles with dozens of common problem patterns across many JVM versions and JVM vendors.<\/p>\n<p>Please bookmark this page and stay tuned for weekly articles.<br \/>\nPlease also feel free to share this Thread Dump training plan with your work colleagues and friends.<\/p>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">Sounds good, I really need to improve my Thread Dump skills\u2026 so where do we start?<\/span><\/strong><\/p>\n<p>What I\u2019m proposing to you is a complete Thread Dump training plan. The following items will be covered. I will also provide you with real life Thread Dump examples that you can study and understand.<\/p>\n<p>1) &nbsp;Thread Dump overview &amp; fundamentals<br \/>\n2) &nbsp;Thread Dump generation techniques and available tools<br \/>\n3) &nbsp;Thread Dump format differences between Sun HotSpot, IBM JRE and Oracle JRockit<br \/>\n4) &nbsp;Thread Stack Trace explanation and interpretation<br \/>\n5) &nbsp;Thread Dump analysis and correlation techniques<br \/>\n6) &nbsp;Thread Dump common problem patterns (Thread race, deadlock, hanging IO calls, garbage collection \/ OutOfMemoryError problems, infinite looping etc.)<br \/>\n7) &nbsp;Thread Dump examples via real life case studies<\/p>\n<p>I really hope this Thread Dump analysis training plan will be beneficial for you so please stay tuned for weekly updates and articles!<\/p>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">But what if I still have questions or still struggling to understand these training articles?<\/span><\/strong><\/p>\n<p>Don\u2019t worry and please consider me as your trainer. I strongly encourage you to ask me <u>any question<\/u> on Thread Dump (<i>remember, there are no stupid questions<\/i>) so I propose the following options to you for free; simply chose the communication model that you are more comfortable with:<\/p>\n<p>1) &nbsp;Submit your Thread Dump related question(s) by posting your comment(s) below the article (<i>please feel free to remain Anonymous<\/i>)<br \/>\n2) &nbsp;Submit your Thread Dump data to the <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/p\/java-ee-forum_25.html\">Root Cause Analysis forum<\/a><br \/>\n3) &nbsp;Email me your Thread Dump related question(s) @<a href=\"mailto:phcharbonneau@hotmail.com\">phcharbonneau@hotmail.com<\/a><\/p>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">Can I send you my Thread Dump data from my production environment \/ servers?<\/span><\/strong><\/p>\n<p>Yes, please feel free to send me your generated Thread Dump data via email or <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/p\/java-ee-forum_25.html\">Root Cause Analysis forum<\/a> if you wish to discuss the root cause of your problem(s). Real life Thread Dump analysis is always the best way to learn.<\/p>\n<p>I really hope that you will enjoy and share this Thread Dump analysis training plan. I will do my very best to provide you with quality material and answers to any question.<\/p>\n<p>Before going deeper into Thread Dump analysis and problem patterns, it is very important that you understand the fundamentals. The post will cover the basics and allow you to better your JVM and middleware interaction with your Java EE container.<\/p>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">Java VM overview<\/span><\/strong><\/p>\n<p>The Java virtual machine is really the foundation of any Java EE platform. This is where your middleware and applications are deployed and active.<\/p>\n<p>The JVM provides the middleware software and your Java \/ Java EE program with:<\/p>\n<p>&#8211;   A runtime environment for your Java \/ Java EE program (bytecode format)<br \/>\n&#8211;   Several program features and utilities (IO facilities, data structure, Threads management, security, monitoring etc.)<br \/>\n&#8211;   Dynamic memory allocation and management via the garbage collector<\/p>\n<p>Your JVM can reside on many OS (Solaris, AIX, Windows etc.) and depending of your physical server specifications, you can install 1&#8230;n JVM processes per physical \/ virtual server.<\/p>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">JVM and Middleware software interactions<\/span><\/strong><\/p>\n<p>Find below a diagram showing you a high level interaction view between the JVM, middleware and application(s).<\/p>\n<div class=\"MsoNormal\">\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/2.bp.blogspot.com\/-Q0nlfSgYJZo\/T3DR4whi85I\/AAAAAAAAAq0\/tFiQjDACjn0\/s1600\/JVM_middleware_interactions.png\"><span class=\"Apple-style-span\" style=\"font-family: inherit\"><img decoding=\"async\" border=\"0\" src=\"http:\/\/2.bp.blogspot.com\/-Q0nlfSgYJZo\/T3DR4whi85I\/AAAAAAAAAq0\/tFiQjDACjn0\/s1600\/JVM_middleware_interactions.png\" \/><\/span><\/a><\/div>\n<p>This is showing you a typical and simple interaction diagram between the JVM, middleware and application. As you can see, the Threads allocation for a standard Java EE application are done mainly between the middleware kernel itself and JVM (<i>there are some exceptions when application itself or some APIs create Threads directly but this is not common and must be done very carefully<\/i>).<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Also, please note that certain Threads are managed internally within the JVM itself such as GC (garbage collection) Threads in order to handle concurrent garbage collections.<\/p>\n<p>Since most of the Thread allocations are done by the Java EE container, it is important that you understand and recognize the Thread Stack Trace and identify it properly from the Thread Dump data. This will allow you to understand quickly the type of request that the Java EE container is attempting to execute.<\/p>\n<p>From a Thread Dump analysis perspective, you will learn how to differentiate between the different Thread Pools found from the JVM and identify the request type.<\/p>\n<p>This last section will provide you with an overview of what is a JVM Thread Dump for the HotSpot VM and the different Threads that you will find. Detail for the IBM VM Thread Dump format will be provided in the part 4.<\/p>\n<p>Please note that you will find the Thread Dump sample used for this article from the r<a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/p\/java-ee-forum_25.html\">oot cause analysis forum<\/a>.<\/p>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">JVM Thread Dump \u2013 what is it?<\/span><\/strong><\/p>\n<p>A JVM Thread Dump is a snapshot taken at a given time which provides you with a complete listing of all created Java Threads.<\/p>\n<p>Each individual Java Thread found gives you information such as:<\/p>\n<p>&#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Thread name<\/span>; often used by middleware vendors to identify the Thread Id along with its associated Thread Pool name and state (running, stuck etc.)<\/p>\n<p>&nbsp; &nbsp; &nbsp; &#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Thread type &amp; priority<\/span> ex: <span class=\"Apple-style-span\" style=\"font-family: 'Courier New', Courier, monospace\">daemon prio=3<\/span> <i>** middleware softwares typically create their Threads as daemon meaning their Threads are running in background; providing services to its user e.g. your Java EE application **<\/i><\/p>\n<p>&nbsp; &nbsp; &nbsp; &nbsp;&#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Java Thread ID<\/span> ex: <span class=\"Apple-style-span\" style=\"font-family: 'Courier New', Courier, monospace\">tid=0x000000011e52a800<\/span> <i>** This is the Java Thread Id obtained via java.lang.Thread.getId() and usually implemented as an auto-incrementing long 1..n**<\/i><\/p>\n<p>&nbsp; &nbsp; &nbsp; &nbsp;&#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Native Thread ID<\/span> ex: <span class=\"Apple-style-span\" style=\"font-family: 'Courier New', Courier, monospace\">nid=0x251c<\/span><i>** Crucial information as this native Thread Id allows you to correlate for example which Threads from an OS perspective are using the most CPU within your JVM etc. **<\/i><\/p>\n<p>&nbsp; &nbsp; &nbsp; &nbsp;&#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Java Thread State and detail<\/span> ex: <span class=\"Apple-style-span\" style=\"font-family: 'Courier New', Courier, monospace\">waiting for monitor entry [0xfffffffea5afb000] java.lang.Thread.State: BLOCKED (on object monitor)<\/span><br \/>\n<i>** Allows to quickly learn about Thread state and its potential current blocking condition **<\/i><\/p>\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Java Thread Stack Trace<\/span>; this is by far the most important data that you will find from the Thread Dump. This is also where you will spent most of your analysis time since the Java Stack Trace provides you with 90% of the information that you need in order to pinpoint root cause of many problem pattern types as you will learn later in the training sessions<\/p>\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &#8211;        <span class=\"Apple-style-span\" style=\"color: blue\">Java Heap breakdown<\/span>; starting with HotSpot VM 1.6, you will also find at the bottom of the Thread Dump snapshot a breakdown of the HotSpot memory spaces utilization such as your Java Heap (YoungGen, OldGen) &amp; PermGen space. This is quite useful when excessive GC is suspected as a possible root cause so you can do out-of-the-box correlation with Thread data \/ patterns found<\/p>\n<pre class=\"brush:bash\">Heap\r\nPSYoungGen      total 466944K, used 178734K [0xffffffff45c00000, 0xffffffff70800000, 0xffffffff70800000)\r\neden space 233472K, 76% used [0xffffffff45c00000,0xffffffff50ab7c50,0xffffffff54000000)\r\nfrom space 233472K, 0% used [0xffffffff62400000,0xffffffff62400000,0xffffffff70800000)\r\nto   space 233472K, 0% used [0xffffffff54000000,0xffffffff54000000,0xffffffff62400000)\r\nPSOldGen        total 1400832K, used 1400831K [0xfffffffef0400000, 0xffffffff45c00000, 0xffffffff45c00000)\r\nobject space 1400832K, 99% used [0xfffffffef0400000,0xffffffff45bfffb8,0xffffffff45c00000)\r\nPSPermGen       total 262144K, used 248475K [0xfffffffed0400000, 0xfffffffee0400000, 0xfffffffef0400000)\r\nobject space 262144K, 94% used [0xfffffffed0400000,0xfffffffedf6a6f08,0xfffffffee0400000)\r\n<\/pre>\n<p><strong><span class=\"Apple-style-span\" style=\"font-size: large\">Thread Dump breakdown overview<\/span><\/strong><\/p>\n<p>In order for you to better understand, find below a diagram showing you a visual breakdown of a HotSpot VM Thread Dump and its common Thread Pools found:<\/p>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><span class=\"Apple-style-span\" style=\"font-family: inherit\"><img decoding=\"async\" border=\"0\" src=\"http:\/\/1.bp.blogspot.com\/-2VIWWRUXCY8\/T3DTiqV_T7I\/AAAAAAAAAq8\/7kNtQ9cFAOo\/s1600\/Thread_Dump_view_HotSpot_VM.png\" \/><\/span><\/div>\n<div style=\"font-family: inherit;text-align: left\">As you can there are several pieces of information that you can find from a HotSpot VM Thread Dump. Some of these pieces will be more important than others depending of your problem pattern(problem patterns will be simulated and explained in future articles).<\/p>\n<p>For now, find below a detailed explanation for each Thread Dump section as per our <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/p\/java-ee-forum_25.html\">sample<\/a> HotSpot Thread Dump:<\/p>\n<p><span class=\"Apple-style-span\" style=\"color: blue\"># Full thread dump identifier<\/span><br \/>\nThis is basically the unique keyword that you will find in your middleware \/ standalong Java standard output log once you generate a Thread Dump (ex: via kill -3 &lt;PID&gt; for UNIX). This is the beginning of the Thread Dump snapshot data.<\/p>\n<pre class=\"brush:bash\">Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.0-b11 mixed mode):\r\n<\/pre>\n<p><span class=\"Apple-style-span\" style=\"color: blue\"># Java EE middleware, third party &amp; custom application Threads<\/span><br \/>\nThis portion is the core of the Thread Dump and where you will typically spend most of your analysis time. The number of Threads found will depend on your middleware software that you use, third party libraries (that might have its own Threads) and your application (<i>if creating any custom Thread, which is generally not a best practice<\/i>).<\/p>\n<p>In our sample Thread Dump, Weblogic is the middleware used. Starting with Weblogic 9.2, a self-tuning Thread Pool is used with unique identifier \u201c&#8217;weblogic.kernel.Default (self-tuning)\u201d<\/p>\n<pre class=\"brush:java\">\"[STANDBY] ExecuteThread: '414' for queue: 'weblogic.kernel.Default (self-tuning)'\" daemon prio=3 tid=0x000000010916a800 nid=0x2613 in Object.wait() [0xfffffffe9edff000]\r\n   java.lang.Thread.State: WAITING (on object monitor)\r\n        at java.lang.Object.wait(Native Method)\r\n        - waiting on &lt;0xffffffff27d44de0&gt; (a weblogic.work.ExecuteThread)\r\n        at java.lang.Object.wait(Object.java:485)\r\n        at weblogic.work.ExecuteThread.waitForRequest(ExecuteThread.java:160)\r\n        - locked &lt;0xffffffff27d44de0&gt; (a weblogic.work.ExecuteThread)\r\n        at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)\r\n<\/pre>\n<p><span class=\"Apple-style-span\" style=\"color: blue\"># HotSpot VM Thread<\/span><br \/>\nThis is an internal Thread managed by the HotSpot VM in order to perform internal native operations. Typically you should not worry about this one unless you see high CPU(via Thread Dump &amp; prstat \/ native Thread id correlation).<\/p>\n<pre class=\"brush:bash\">\"VM Periodic Task Thread\" prio=3 tid=0x0000000101238800 nid=0x19 waiting on condition\r\n<\/pre>\n<p><span class=\"Apple-style-span\" style=\"color: blue\"># HotSpot GC Thread<\/span><br \/>\nWhen using HotSpot parallel GC (quite common these days when using multi physical cores hardware), the HotSpot VM create by default or as per your JVM tuning a certain # of GC Threads. These GC Threads allow the VM to perform its periodic GC cleanups in a parallel manner, leading to an overall reduction of the GC time; at the expense of increased CPU utilization.<\/p>\n<pre class=\"brush:bash\">\"GC task thread#0 (ParallelGC)\" prio=3 tid=0x0000000100120000 nid=0x3 runnable\r\n\"GC task thread#1 (ParallelGC)\" prio=3 tid=0x0000000100131000 nid=0x4 runnable\r\n\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\r\n<\/pre>\n<p>This is crucial data as well since when facing GC related problems such as excessive GC, memory leaks etc, you will be able to correlate any high CPU observed from the OS \/ Java process(es) with these Threads using their native id value (nid=0x3). You will learn how to identify and confirm this problem is future articles.<\/p>\n<p><span class=\"Apple-style-span\" style=\"color: blue\"># JNI global references count<\/span><br \/>\nJNI (Java Native Interface) global references are basically Object references from the native code to a Java object managed by the Java garbage collector. Its role is to prevent collection of an object that is still in use by native code but technically with no &#8220;live&#8221; references in the Java code.<\/p>\n<p>It is also important to keep an eye on JNI references in order to detect JNI related leaks. This can happen if you program use JNI directly or using third party tools like monitoring tools which are prone to native memory leaks.<\/p>\n<pre class=\"brush:bash\">JNI global references: 1925\r\n<\/pre>\n<p><span class=\"Apple-style-span\" style=\"color: blue\"># Java Heap utilization view<\/span><br \/>\nThis data was added back to JDK 1 .6 and provides you with a short and fast view of your HotSpot Heap. I find it quite useful when troubleshooting GC related problems along with HIGH CPU since you get both Thread Dump &amp; Java Heap in a single snapshot allowing you to determine (or to rule out) any pressure point in a particular Java Heap memory space along with current Thread computing currently being done at that time. As you can see in our sample Thread Dump, the Java Heap OldGen is maxed out!<\/p>\n<pre class=\"brush:bash\">Heap\r\n PSYoungGen      total 466944K, used 178734K [0xffffffff45c00000, 0xffffffff70800000, 0xffffffff70800000)\r\n  eden space 233472K, 76% used [0xffffffff45c00000,0xffffffff50ab7c50,0xffffffff54000000)\r\n  from space 233472K, 0% used [0xffffffff62400000,0xffffffff62400000,0xffffffff70800000)\r\n  to   space 233472K, 0% used [0xffffffff54000000,0xffffffff54000000,0xffffffff62400000)\r\n PSOldGen        total 1400832K, used 1400831K [0xfffffffef0400000, 0xffffffff45c00000, 0xffffffff45c00000)\r\n  object space 1400832K, 99% used [0xfffffffef0400000,0xffffffff45bfffb8,0xffffffff45c00000)\r\n PSPermGen       total 262144K, used 248475K [0xfffffffed0400000, 0xfffffffee0400000, 0xfffffffef0400000)\r\n  object space 262144K, 94% used [0xfffffffed0400000,0xfffffffedf6a6f08,0xfffffffee0400000)\r\n<\/pre>\n<p>I hope this article has helped to understand the basic view of a HotSpot VM Thread Dump.The next article will provide you this same Thread Dump overview and breakdown for the IBM VM.<\/p>\n<p>Please feel free to post any comment or question.<\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2011\/11\/how-to-analyze-thread-dump-part-1.html\">How to analyze Thread Dump \u2013 part 1<\/a>,&nbsp;<span class=\"Apple-style-span\" style=\"font-family: inherit\"><span class=\"Apple-style-span\" style=\"font-size: 15px\"><strong><i>&nbsp;<\/i><\/strong><a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2012\/01\/how-to-analyze-thread-dump-part2-jvm.html\">How to analyze Thread Dump \u2013 Part2: JVM Overview<\/a>&nbsp;&amp;&nbsp;<\/span><span class=\"Apple-style-span\" style=\"font-size: 15px\"><a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2012\/02\/how-to-analyze-thread-dump-part-3.html\">How to analyze Thread Dump \u2013 Part 3: HotSpot VM<\/a><\/span><span class=\"Apple-style-span\" style=\"font-size: 15px\">&nbsp;from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a><span class=\"Apple-style-span\"><span class=\"Apple-style-span\" style=\"font-size: 14px;line-height: 18px\"><strong>&nbsp;<\/strong><\/span><\/span>Pierre-Hugues Charbonneau at the&nbsp;<a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/\">Java EE Support Patterns &amp; Java Tutorial<\/a>&nbsp;blog.<br \/>\n<\/span><\/span><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is the most important skillset to master for any individual involved in Java EE production support. The amount of information that you can derive from Thread Dump snapshots is &hellip;<\/p>\n","protected":false},"author":189,"featured_media":148,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[340,207,380],"class_list":["post-959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-core-java","tag-garbage-collection","tag-jvm","tag-threads"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM: How to analyze Thread Dump - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM: How to analyze Thread Dump - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-03-30T20:15:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-21T23:07:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Pierre Hugues Charbonneau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/PHCharbonneau\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pierre Hugues Charbonneau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html\"},\"author\":{\"name\":\"Pierre Hugues Charbonneau\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/866904c8ea3551dbbb464ce6bbb17035\"},\"headline\":\"JVM: How to analyze Thread Dump\",\"datePublished\":\"2012-03-30T20:15:00+00:00\",\"dateModified\":\"2012-10-21T23:07:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html\"},\"wordCount\":1917,\"commentCount\":22,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"keywords\":[\"Garbage Collection\",\"JVM\",\"Threads\"],\"articleSection\":[\"Core Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html\",\"name\":\"JVM: How to analyze Thread Dump - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"datePublished\":\"2012-03-30T20:15:00+00:00\",\"dateModified\":\"2012-10-21T23:07:53+00:00\",\"description\":\"This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/03\\\/jvm-how-to-analyze-thread-dump.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Core Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/core-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"JVM: How to analyze Thread Dump\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/866904c8ea3551dbbb464ce6bbb17035\",\"name\":\"Pierre Hugues Charbonneau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g\",\"caption\":\"Pierre Hugues Charbonneau\"},\"description\":\"Pierre-Hugues Charbonneau (nickname P-H) is working for CGI Inc. Canada for the last 10 years as a senior IT consultant. His primary area of expertise is Java EE, middleware &amp; JVM technologies. He is a specialist in production system troubleshooting, root cause analysis, middleware, JVM tuning, scalability and capacity improvement; including internal processes improvement for IT support teams. P-H is the principal author at Java EE Support Patterns.\",\"sameAs\":[\"http:\\\/\\\/javaeesupportpatterns.blogspot.com\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/PHCharbonneau\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Pierre-Hugues-Charbonneau\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JVM: How to analyze Thread Dump - Java Code Geeks","description":"This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html","og_locale":"en_US","og_type":"article","og_title":"JVM: How to analyze Thread Dump - Java Code Geeks","og_description":"This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is","og_url":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-03-30T20:15:00+00:00","article_modified_time":"2012-10-21T23:07:53+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","type":"image\/jpeg"}],"author":"Pierre Hugues Charbonneau","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/PHCharbonneau","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Pierre Hugues Charbonneau","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html"},"author":{"name":"Pierre Hugues Charbonneau","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/866904c8ea3551dbbb464ce6bbb17035"},"headline":"JVM: How to analyze Thread Dump","datePublished":"2012-03-30T20:15:00+00:00","dateModified":"2012-10-21T23:07:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html"},"wordCount":1917,"commentCount":22,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","keywords":["Garbage Collection","JVM","Threads"],"articleSection":["Core Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html","url":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html","name":"JVM: How to analyze Thread Dump - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","datePublished":"2012-03-30T20:15:00+00:00","dateModified":"2012-10-21T23:07:53+00:00","description":"This article will teach you how to analyze a JVM Thread Dump and pinpoint the root cause of your problem(s). From my perspective, Thread Dump analysis is","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/03\/jvm-how-to-analyze-thread-dump.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Core Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/core-java"},{"@type":"ListItem","position":4,"name":"JVM: How to analyze Thread Dump"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/866904c8ea3551dbbb464ce6bbb17035","name":"Pierre Hugues Charbonneau","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g","caption":"Pierre Hugues Charbonneau"},"description":"Pierre-Hugues Charbonneau (nickname P-H) is working for CGI Inc. Canada for the last 10 years as a senior IT consultant. His primary area of expertise is Java EE, middleware &amp; JVM technologies. He is a specialist in production system troubleshooting, root cause analysis, middleware, JVM tuning, scalability and capacity improvement; including internal processes improvement for IT support teams. P-H is the principal author at Java EE Support Patterns.","sameAs":["http:\/\/javaeesupportpatterns.blogspot.com\/","https:\/\/x.com\/https:\/\/twitter.com\/PHCharbonneau"],"url":"https:\/\/www.javacodegeeks.com\/author\/Pierre-Hugues-Charbonneau"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/189"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=959"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/959\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}