{"id":5716,"date":"2016-09-15T11:22:41","date_gmt":"2016-09-15T16:22:41","guid":{"rendered":"http:\/\/appcrawler.com\/wordpress\/?p=5716"},"modified":"2016-09-15T21:01:13","modified_gmt":"2016-09-16T02:01:13","slug":"weblogic-stuck-thread-printer","status":"publish","type":"post","link":"http:\/\/appcrawler.com\/wordpress\/2016\/09\/15\/weblogic-stuck-thread-printer\/","title":{"rendered":"Weblogic stuck thread printer"},"content":{"rendered":"<p>This is a useful script for crawling the Weblogic domain logs and printing threads that have been stuck, as well as the duration they were stuck.  It doesn&#8217;t include the initial ten minute (default) window before a log entry is written indicating the thread is stuck.<\/p>\n<pre>\r\nimport glob, time\r\nfrom datetime import timedelta\r\nstuck = dict()\r\nfor f in sorted(glob.glob(\".\/RPMDomain\/servers\/rpm_server1\/logs\/rpm_server1.log*\"),reverse=True):\r\n  for line in open(f,\"r\"):\r\n    tmp = line.split()\r\n    if len(tmp) > 27 and tmp[23].find(\"STUCK\") > -1:\r\n      stuck[tmp[25]] = tmp[0].replace(\"####<\",\"\") + \" \" + tmp[1] + \" \" + tmp[2] + \" \" + tmp[3] + \" \" + tmp[4]\r\n    elif len(tmp) > 32 and tmp[32].find(\"unstuck\") > -1 and tmp[25] in stuck:\r\n      unstuck = tmp[0].replace(\"####<\",\"\") + \" \" + tmp[1] + \" \" + tmp[2] + \" \" + tmp[3] + \" \" + tmp[4]\r\n      l=time.strptime(stuck[tmp[25]],\"%b %d, %Y %H:%M:%S %p\")\r\n      l2=time.strptime(unstuck,\"%b %d, %Y %H:%M:%S %p\")\r\n      diff = time.mktime(l2) - time.mktime(l)\r\n      if diff >= 0:\r\n        m, s = divmod(diff, 60)\r\n        h, m = divmod(m, 60)\r\n        tm = \"%d:%02d:%02d\" % (h, m, s)\r\n        print tmp[25],\"stuck at\", stuck[tmp[25]],\", unstuck at\",unstuck,\", stuck for\",tm\r\n<\/pre>\n<p>This will result in output such as&#8230;<\/p>\n<pre>\r\n'25' stuck at Sep 14, 2016 9:39:29 AM, unstuck at Sep 14, 2016 9:44:42 AM , stuck for 0:05:13\r\n'46' stuck at Sep 14, 2016 9:40:29 AM, unstuck at Sep 14, 2016 9:46:41 AM , stuck for 0:06:12\r\n'17' stuck at Sep 14, 2016 9:38:29 AM, unstuck at Sep 14, 2016 9:48:09 AM , stuck for 0:09:40\r\n'11' stuck at Sep 14, 2016 9:47:29 AM, unstuck at Sep 14, 2016 9:49:07 AM , stuck for 0:01:38\r\n'29' stuck at Sep 14, 2016 9:39:29 AM, unstuck at Sep 14, 2016 9:56:02 AM , stuck for 0:16:33\r\n'3' stuck at Sep 14, 2016 9:39:29 AM, unstuck at Sep 14, 2016 9:56:21 AM , stuck for 0:16:52\r\n'16' stuck at Sep 14, 2016 9:38:29 AM, unstuck at Sep 14, 2016 10:00:50 AM , stuck for 0:22:21\r\n'0' stuck at Sep 14, 2016 9:46:29 AM, unstuck at Sep 14, 2016 10:24:46 AM , stuck for 0:38:17\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This is a useful script for crawling the Weblogic domain logs and printing threads that have been stuck, as well as the duration they were stuck. It doesn&#8217;t include the initial ten minute (default) window before a log entry is&hellip;<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"http:\/\/appcrawler.com\/wordpress\/2016\/09\/15\/weblogic-stuck-thread-printer\/\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"footnotes":""},"categories":[48,8,52],"tags":[],"_links":{"self":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts\/5716"}],"collection":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/comments?post=5716"}],"version-history":[{"count":11,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts\/5716\/revisions"}],"predecessor-version":[{"id":5729,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts\/5716\/revisions\/5729"}],"wp:attachment":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/media?parent=5716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/categories?post=5716"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/tags?post=5716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}