🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #141998

Re: w jaki sposob moge sprawdzic gdzie sie zatrzymaly watki?

#141998
From: Filip Sielimowicz
Date: Wed, 29 Oct 2008 09:49
121 lines
3297 bytes
Użytkownik "R.M." <rafalm1980@gmail.com> napisał w wiadomości 
news:ge96bl$md3$1@news.vectranet.pl...
> Witam,
> Mam program wielowatkowy, w pewnym momencie gdzies (chyba) pojawia sie 
> deadlock, nie mam pojecia gdzie, w jaki sposob moglbym zlokalizowac 
> usterke, chodzi o przerwanie dzialania programu i sprawdzenie jakie 
> funkcje sa w danej chwili wykonywane  (np. lock.lock(), stream.read())
>
> uzywam netbeans 6.1
>
> pozdrawiam,
> R.M.


;))

import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;


/**

* Klasa narzędziowa, zawiera procedurę zrzucania

* na stdout stack trace'a wszystkich wątków,

* + prosta statystyką pokazująca np. w których miejscach

* najwięcej wątków "wisi".

* @author filip

*/

public class ThreadsSnapshot {

public ThreadsSnapshot() {

logThreads();

}


final int TRACES = 30;


public void logThreads() {

Map<Thread, StackTraceElement[]> traces= Thread.getAllStackTraces();

Map<String, Integer> idTracesCounts = new HashMap<String, Integer>();

for (Entry<Thread, StackTraceElement[]> ent : traces.entrySet()) {

System.out.println("Thread ["+ent.getKey().getName()+"]");

StackTraceElement[] tr = ent.getValue();

StackTraceElement idTrace = null;

for (int i=0;i<TRACES && i<tr.length;i++) {

int t = i;

System.out.println("\t "+tr[t].getClassName()+"."+tr[t].getMethodName()+"() 
("+tr[t].getFileName()+":"+tr[t].getLineNumber()+")");

if (idTrace==null) {

String meth = tr[t].getClassName()+"."+tr[t].getMethodName()+"()";

if (!"java.lang.Object.wait()".equals(meth)) {

idTrace = tr[t];

Integer cntr = idTracesCounts.remove(meth);

if (cntr==null) cntr=0;

cntr = cntr+1;

idTracesCounts.put(meth, cntr);

}

}

}

System.out.println("");

}

System.out.println("Statystyka punktów zatrzymania:");

System.out.println(""+traces.size()+"\t - Ogólna liczba wątków");

for (Entry<String, Integer> ent : idTracesCounts.entrySet()) {

System.out.println(""+ent.getValue()+"\t - "+ent.getKey());

}

System.out.println(" *** KONIEC");

}


/** Przykładowe odpalenie - prezentacja jak to używać */

public static void main(String[] args) {

new ThreadsSnapshot();

}

}
Technical Details
Message-ID: <ge9c1p$qme$1@nemesis.news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!news.intelink.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
References: <ge96bl$md3$1@news.vectranet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!news.intelink.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
From: "Filip Sielimowicz" <sielim@wp.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: w jaki sposob moge sprawdzic gdzie sie zatrzymaly watki?
Date: Wed, 29 Oct 2008 10:49:09 +0100
Organization: TP - http://www.tp.pl/
Lines: 123
Message-ID: <ge9c1p$qme$1@nemesis.news.neostrada.pl>
References: <ge96bl$md3$1@news.vectranet.pl>
NNTP-Posting-Host: efp194.internetdsl.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.neostrada.pl 1225274233 27342 83.14.249.194 (29 Oct 2008 09:57:13 GMT)
X-Complaints-To: usenet@news.neostrada.pl
NNTP-Posting-Date: Wed, 29 Oct 2008 09:57:13 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.3138
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3350
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit