awk script to print blocked threads in a java thread dump

-bash-4.1$ cat blocked_threads.awk
#!/bin/awk -f

{
  if ($0 ~ "- locked" || $0 ~ "- waiting to lock") {
    s[i++]=$0
  }
}
END {
  for (i in s) {
    if (s[i] ~ "waiting to lock") {
      split(s[i],t)
      for (j in s) {
        split(s[j],u)
        if (s[j] ~ "- locked" && u[3] ~ t[5]) {
          print u[3],u[5]," is blocking ",t[7]
          break
        }
      }
    }
  }
}

Copy and paste the awk code above into a file name blocked_theads.awk (or whatever you want)
chmod u+x blocked_threads.awk

…and run…

-bash-4.1$ ./blocked_thread.awk /tmp/thread_dump_201207261821.dmp
<0x0000000776ee2400> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x00000007928ff1b0> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000072e80b388> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000072b10e140> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000072d630478> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x00000007114848a8> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x0000000732527c30> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x00000007a89bbde8> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x00000007a5735f68> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x0000000776df6c18> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000078a6752e0> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x00000007737f4368> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000073cd09230> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000072e80b388> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
<0x000000076e939ac8> com.foo.commerce.order.fooOrderImpl)  is blocking  com.foo.commerce.order.fooOrderImpl)
-bash-4.1$

1 comment for “awk script to print blocked threads in a java thread dump

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.