identyfikacja wątku
Leonard Milcin Jr. - 20-11-2006 00:02
identyfikacja wątku Mam sobie aplikację, która generuje mnóstwo wątków różnego rodzaju. Niektóre są napisane przeze mnie (np. wątki odpalane przy starcie aplikacji), niektóre są związane z jedną z wielu używanych przeze mnie bibliotek (np. com.sun.net.httpserver czy org.apache.commons.httpclient).
Mój problem polega na tym, że w jakiś sposób aplikacja ,,łapie'' utylizację. Podejrzewam, że któryś wątek się gdzieś zapętla. Problem w tym, że aplikacja działa jak najbardziej prawidłowo (no... poza 100% utylizacji procesora). To znaczy, że żaden z wątków które ja osobiście odpaliłem nie jest bezpośrednio uwikłany w taką pętlę bo inaczej straciłbym kontakt z którymś podsystemem aplikacji.
Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) który mógłby mi pomóc zidentyfikować klasę implementującą wątek która jest odpowiedzialna za utylizację?
Pozdrawiam, Leonard
Jarek Kucypera - 20-11-2006 00:02
Leonard Milcin Jr. wrote:
> Mój problem polega na tym, że w jakiś sposób aplikacja ,,łapie'' > utylizację.
> Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) > który mógłby mi pomóc zidentyfikować klasę implementującą wątek która > jest odpowiedzialna za utylizację?
Dżizas, gdybym był złośliwy, odpisałbym, że utylizacją zajmuje się odśmiecacz.
-- J.K.
Leonard Milcin Jr. - 20-11-2006 00:02
Jarek Kucypera wrote: > Leonard Milcin Jr. wrote: > >> Mój problem polega na tym, że w jakiś sposób aplikacja ,,łapie'' >> utylizację. > >> Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) >> który mógłby mi pomóc zidentyfikować klasę implementującą wątek która >> jest odpowiedzialna za utylizację? > > Dżizas, gdybym był złośliwy, odpisałbym, że utylizacją zajmuje się > odśmiecacz. >
Zapewne tak. Zwłaszcza, że utylizacja procesora wzrasta nagle do 100% i pozostaje tak już na stałe choć aplikacja nic nie powinna robić.
Leonard
Mikołaj Rydzewski - 20-11-2006 00:02
Leonard Milcin Jr. wrote:
> Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) > który mógłby mi pomóc zidentyfikować klasę implementującą wątek która > jest odpowiedzialna za utylizację?
Jesli to Java 5 to poczytaj sobie o JMX i jconsole. Wszystko ladnie bedzie widac.
-- Mikolaj Rydzewski <miki@ceti.pl> http://ceti.pl/~miki/ PGP KeyID: 8b12ab02 There are three kinds of people: men, women and unix.
Twelve Hungry Mammoths - 20-11-2006 00:02
On Tue, 22 Aug 2006 18:46:15 +0200, Leonard Milcin Jr. <leonard.milcin@post.wytnij.pl> wrote: > > Mój problem polega na tym, że w jakiś sposób aplikacja ,,łapie'' > utylizację. Podejrzewam, że któryś wątek się gdzieś zapętla. Problem w > tym, że aplikacja działa jak najbardziej prawidłowo (no... poza 100% > utylizacji procesora). To znaczy, że żaden z wątków które ja osobiście > odpaliłem nie jest bezpośrednio uwikłany w taką pętlę bo inaczej > straciłbym kontakt z którymś podsystemem aplikacji.
jezeli aplikacja napisana jest modulowo, to sprobuj powylaczac wszystkie mozliwe moduly. moze w ten sposob zidentyfikujesz winnego.
pzdr szeryf
mgl - 20-11-2006 00:03
Leonard Milcin Jr. wrote: > Zapewne tak. Zwłaszcza, że utylizacja procesora wzrasta nagle do 100% i > pozostaje tak już na stałe choć aplikacja nic nie powinna robić.
Kwestia formalna - nie używajmy słów, których nie znamy, bo śmiesznie wychodzi: http://sjp.pwn.pl/haslo.php?id=64887
I tak, Leonardzie, utylizacją procesorów można zajmować się co najwyżej w porozumieniu z miejskimi przedsiębiorstwami oczyszania.
Odnośnie śledzenia wątków - zapoznaj się z możliwościami JConsole: http://java.sun.com/developer/techni.../jconsole.html
Nie korzystałem z tego, ale może Tobie się przyda. Jeśli nie to warto się rozejrzeć za innymi narzędziami do monitorowania.
-- pozdrawiam, Michał
Leonard Milcin Jr. - 20-11-2006 00:03
Mikołaj Rydzewski wrote: > Leonard Milcin Jr. wrote: > >> Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) >> który mógłby mi pomóc zidentyfikować klasę implementującą wątek która >> jest odpowiedzialna za utylizację? > > Jesli to Java 5 to poczytaj sobie o JMX i jconsole. Wszystko ladnie > bedzie widac. >
Na śmierć zapomniałem!
Vielen herzlichen Dank!
Leonard
lucassus - 20-11-2006 00:03
Leonard Milcin Jr. napisał(a): > Mam sobie aplikację, która generuje mnóstwo wątków różnego rodzaju. >
polecam: http://jdn.pl/search/node/Debugger+Twoim+przyjacielem szczegolnie: http://jdn.pl/node/464
Leonard Milcin Jr. - 20-11-2006 00:03
lucassus wrote: > Leonard Milcin Jr. napisał(a): >> Mam sobie aplikację, która generuje mnóstwo wątków różnego rodzaju. >> > > polecam: > http://jdn.pl/search/node/Debugger+Twoim+przyjacielem > szczegolnie: > http://jdn.pl/node/464
A ja proponowałbym zastanowić się nad tym co piszesz. Napisałem, że włożenie całego skomplikowanego systemu w debugger nie wchodzi w rachubę. Ponadto, żeby w debuggerze coś złapać to trzeba mieć choćby blade pojęcie o tym, gdzie (np. gdzie patrzeć albo gdzie postawić breakpoint). Mi narazie chodzi o ustalenie tego, gdzie patrzeć. I prawdopodobnie nie chodzi nawet o mój kod tylko kod którejś z użytych bibliotek (może źle używam?)
Zresztą znalazłem drogę i obserwuję sobie aplikację przez jconsole.
Leonard
Pawel Stawicki - 20-11-2006 00:03
Leonard Milcin Jr. wrote: > lucassus wrote: >> Leonard Milcin Jr. napisał(a): >>> Mam sobie aplikację, która generuje mnóstwo wątków różnego rodzaju. >>> >> polecam: >> http://jdn.pl/search/node/Debugger+Twoim+przyjacielem >> szczegolnie: >> http://jdn.pl/node/464 > > Napisałem, że > włożenie całego skomplikowanego systemu w debugger nie wchodzi w > rachubę. Ponadto, żeby w debuggerze coś złapać to trzeba mieć choćby > blade pojęcie o tym, gdzie (np. gdzie patrzeć albo gdzie postawić > breakpoint).
Nie wiem czego używasz, ale ja eclipse'a, i mam w nim system wykorzystujący ok. 40 zewnętrznych bibliotek, podłączonych do niego jest jeszcze 12 modułów napisanych przez nas (które też mają swoje biblioteki), i "włożenie" tego wszystkiego w debugger to nie jest żaden problem. Jeśli wątki zachowują się podejrzanie (też ich jest kilkadziesiąt) to "pauzuję" cały system (takim przyciskiem w eclipsie co wygląda jak pauza na magnetofonie) i mogę zobaczyć na jakiej metodzie który wątek się zatrzymał. Zawsze większość wątków stoi na metodzie wait() lub connect() lub readSocket() lub czymś takim, co z natury "wisi" i nie zajmuje procesora. Jeśli procesor jest w 100% "zutylizowany" to zapewne któryś wątek robi coś innego, i w ten sposób łatwo jest go znaleźć. Nie trzeba nigdzie wstawiać żadnych breakpointów.
Oczywiście zrobisz jak będziesz chciał, odniosłem tylko wrażenie że nie zdajesz sobie sprawy jakie masz możliwości - o ile oczywiście używasz eclipsa. Mam nadzieję że nie będziesz mi miał tego za złe.
Pozdrawiam Paweł Stawicki
Leonard Milcin Jr. - 20-11-2006 00:03
Pawel Stawicki wrote: > Leonard Milcin Jr. wrote: >> lucassus wrote: >>> Leonard Milcin Jr. napisał(a): >>>> Mam sobie aplikację, która generuje mnóstwo wątków różnego rodzaju. >>>> >>> polecam: >>> http://jdn.pl/search/node/Debugger+Twoim+przyjacielem >>> szczegolnie: >>> http://jdn.pl/node/464 >> >> Napisałem, że >> włożenie całego skomplikowanego systemu w debugger nie wchodzi w >> rachubę. Ponadto, żeby w debuggerze coś złapać to trzeba mieć choćby >> blade pojęcie o tym, gdzie (np. gdzie patrzeć albo gdzie postawić >> breakpoint). > > Nie wiem czego używasz, ale ja eclipse'a, i mam w nim system > wykorzystujący ok. 40 zewnętrznych bibliotek, podłączonych do niego jest > jeszcze 12 modułów napisanych przez nas (które też mają swoje > biblioteki), i "włożenie" tego wszystkiego w debugger to nie jest żaden > problem. Jeśli wątki zachowują się podejrzanie (też ich jest > kilkadziesiąt) to "pauzuję" cały system (takim przyciskiem w eclipsie co > wygląda jak pauza na magnetofonie) i mogę zobaczyć na jakiej metodzie > który wątek się zatrzymał. Zawsze większość wątków stoi na metodzie > wait() lub connect() lub readSocket() lub czymś takim, co z natury > "wisi" i nie zajmuje procesora. Jeśli procesor jest w 100% > "zutylizowany" to zapewne któryś wątek robi coś innego, i w ten sposób > łatwo jest go znaleźć. Nie trzeba nigdzie wstawiać żadnych breakpointów.
O tym nie pomyślałem. Bo breakpointy i zaglądanie do zmiennych są dla mnie w tym przypadku bezużyteczne. Jedyny problem polega na tym, że będę musiał mieć przez długi czas aplikację uruchomioną w debuggerze eclipsowym, bo problem zdarza się stosunkowo rzadko (dwa razy na dzień pracy).
> Oczywiście zrobisz jak będziesz chciał, odniosłem tylko wrażenie że nie > zdajesz sobie sprawy jakie masz możliwości - o ile oczywiście używasz > eclipsa. Mam nadzieję że nie będziesz mi miał tego za złe.
Bare bra! Vielen herzlichen Dank! Thank you very much!
Leonard
lucassus - 20-11-2006 00:03
Leonard Milcin Jr. napisał(a):
> > O tym nie pomyślałem. Bo breakpointy i zaglądanie do zmiennych są dla > mnie w tym przypadku bezużyteczne. Jedyny problem polega na tym, że będę > musiał mieć przez długi czas aplikację uruchomioną w debuggerze > eclipsowym, bo problem zdarza się stosunkowo rzadko (dwa razy na dzień > pracy). >
1. Nie musisz ustawiać breakpointów by obserwować uruchomione wątki (tak mi się przynajmniej wydaje). 2. Spróbuj użyć Netbeans profilera. Odpalasz aplikacje na pół dnia i w raporcie sprawdzasz który wątek zawisł. Polecam zapoznanie się z tutorialami do tego narzędzia: http://profiler.netbeans.org/ 3. Nie ma aplikacji, której na dałoby się odpalić w debuggerze :D
pozdrawiam
lucassus - 20-11-2006 00:03
Leonard Milcin Jr. napisał(a): > > Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) > który mógłby mi pomóc zidentyfikować klasę implementującą wątek która > jest odpowiedzialna za utylizację? >
Możesz spróbować użyć "java console" - http://java.sun.com/j2se/1.4.2/docs/...e/console.html
Damian - 20-11-2006 00:03
"Leonard Milcin Jr." <leonard.milcin@post.wytnij.pl> wrote in news:44eb34d6$1@news.home.net.pl:
> Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) > który mógłby mi pomóc zidentyfikować klasę implementującą wątek która > jest odpowiedzialna za utylizację? > > > Pozdrawiam, > Leonard
Pod windows: naciśnij kilka razy w odstępach kilku sekundowych Ctrl+Break Pod Unix: wyślij do procesu javy sygnał Quit (kill z odpowiednim parametrem), także kilka razy.
Po czymś takim java powinna wypisać na stdout zrzut stanu wszystkich wątków. Porównaj kilka takich zrzutów szukając wątków które ciągle są running (state:R) i będziesz wiedział który to wątek i co takiego robi.
Opisana metoda działa w większości wypadków. Nie wymaga debuggera, nie wymaga javy 5. Może być używana w środowisku produkcyjnym.
Pod niektórymi unixami trzeba odpalać killa z tej samej konsoli z której była odpalona java.
Więcej w google, np: http://java.sun.com/developer/techni...ng/Stacktrace/
For busy programs: The best course of action you can take for busy programs is to generate frequent stack traces. This will narrow down the code path that is causing the errors, and you can then start your investigation from there.
-- Damian
Leonard Milcin Jr. - 20-11-2006 00:03
Damian wrote: > "Leonard Milcin Jr." <leonard.milcin@post.wytnij.pl> wrote in > news:44eb34d6$1@news.home.net.pl: > >> Czy istnieje jakiś sposób (poza wpakowaniem wszystkiego do debuggera) >> który mógłby mi pomóc zidentyfikować klasę implementującą wątek która >> jest odpowiedzialna za utylizację? >> >> >> Pozdrawiam, >> Leonard > > Pod windows: naciśnij kilka razy w odstępach kilku sekundowych Ctrl+Break > Pod Unix: wyślij do procesu javy sygnał Quit (kill z odpowiednim > parametrem), także kilka razy. > > Po czymś takim java powinna wypisać na stdout zrzut stanu wszystkich > wątków. > Porównaj kilka takich zrzutów szukając wątków które ciągle są running > (state:R) i będziesz wiedział który to wątek i co takiego robi. > > Opisana metoda działa w większości wypadków. Nie wymaga debuggera, nie > wymaga javy 5. Może być używana w środowisku produkcyjnym. > > Pod niektórymi unixami trzeba odpalać killa z tej samej konsoli z której > była odpalona java. > > Więcej w google, np: > http://java.sun.com/developer/techni...ng/Stacktrace/ > > For busy programs: The best course of action you can take for busy programs > is to generate frequent stack traces. This will narrow down the code path > that is causing the errors, and you can then start your investigation from > there. > >
Dokładnie tego potrzebowałem. Dzięki za odpowiedzi. Mam teraz baterię testów które sobie wykonam gdy tylko problem da o sobie znać ponownie.
Pozdrawiam, Leonard
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
ORA-12154: TNS: nie udalo sie rozstrzygnac podanego identyfikatora polaczenia
Unikalny identyfikator komputera - co byście polecali z poziomu javy ?
r????nica zawartosci dwoch tabel o identycznych strukturach
Dwie identyczne bazy, rozne wyniki selecta
[Oracle] czy można zwiększyć długość nazwy identyfikatora
[MySQL]czy mozna identyfikowac tabele?
[font] bardzo prosze o identyfikacje
Prośba o identyfikację fonta
co to za fon t- prośba o identyfikacj
identyfikacja wizualna
zanotowane.pldoc.pisz.plpdf.pisz.pldirtyboys.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|