If you want to monitor thread death, deploy this mbean and watch the log: public class ThreadCoroner extends ServiceMBeanSupport implements ThreadCoronerMBean { | private ThreadMXBean mbean; | private Map<Long, ThreadInfo> last; | private Timer timer; | private int interval = 60; | | | public int getInterval() { | return interval; | } | public void setInterval(int interval) { | this.interval = interval; | } | | @Override | protected void startService() throws Exception { | mbean = ManagementFactory.getThreadMXBean(); | | timer = new Timer("ThreadCoroner-Timer", true); | TimerTask task = new TimerTask() { | @Override | public void run() { | logDeadThreads(); | } | }; | timer.schedule(task, new Date(), interval * 1000L); | } | | @Override | protected void stopService() throws Exception { | timer.cancel(); | mbean = null; | last = null; | } | | private void logDeadThreads() { | Map<Long, ThreadInfo> current = getAllThreads(); | if (last != null) { | Set<ThreadInfo> dead = new HashSet<ThreadInfo>(); | for (Map.Entry<Long, ThreadInfo> entry : last.entrySet()) { | if (!current.containsKey(entry.getKey())) { | dead.add(entry.getValue()); | } | } | | for (ThreadInfo ti : dead) { | log.debug(ti.getThreadName()); | } | } | last = current; | } | | private Map<Long, ThreadInfo> getAllThreads() { | long myId = Thread.currentThread().getId(); | long[] ids = mbean.getAllThreadIds(); | ThreadInfo[] infos = mbean.getThreadInfo(ids); | Map<Long, ThreadInfo> map = new HashMap<Long, ThreadInfo>(infos.length); | for (ThreadInfo info : infos) { | if (info.getThreadId() == myId) continue; | map.put(new Long(info.getThreadId()), info); | } | return map; | } | }
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059224#4059224 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059224 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user