Avatar billede webster Nybegynder
18. juni 2002 - 13:10 Der er 4 kommentarer og
1 løsning

Et par spg. om deadlocks, og metoder til at debugge

Hejsa

Arbejder på et lille projekt hvor jeg efter flere spg. på eksperten og fiflen frem og tilbage stadigt har nogle problemer med. Jeg har (tilsyneladende) en synkroniseret metode som der bliver ved med at opstå en deadlock i. For at kunne komme videre med at finde fejlen har jeg et par spørgsmål om metoder til at tjekke på monitors/thread stacks som jeg håber nogen kan komme med et svar på.

1. Er det muligt at få udskrevet et stackTrace for et tråd objekt som du har en reference til? Jeg overvejede at ligge en reference af den aktive tråd til side i starten af metoden og så havde en tjek-tråd til at udskrive en trace når der er opstået et deadlock.

2. Findes der nogle metoder til at kigge på et objekts monitor? Altså fx tjekke om der er en synchronized over et objekt.

På forhånd tak for hjælpen

(Jeg vil gerne hæve pointtallet hvis ovenstående betegnes som svære spørgsmål).
Avatar billede disky Nybegynder
18. juni 2002 - 13:28 #1
ikke begge tilfælde mener jeg ikke du kan gøre det :(

Jeg kan dog foreslå du skynder at købe følgende bog:
http://www.bookshop.co.uk/ser/serdsp.asp?siteno=1&shop=20037&isbn=1893115100&DB=224

Den er skrevet af en mand der VIRKELIG har forstand på Tråde og java.

Problemmet med deadlock er at de oftest forekommer pga (undskyld) dårligt design.

Hvis du ikke har designet programmet fra starten med henblik på multitrådning, kan du ligesp godt opgive det og starte forfra.
Det er ca ligeså umulig at gøre et program multitrådet uden deadlock, som det er at besøge solen. :(

spg. 2 kan måske løses via reflection, er dog ikke sikker.

har du ICQ ?
Avatar billede webster Nybegynder
18. juni 2002 - 19:59 #2
"Problemmet med deadlock er at de oftest forekommer pga (undskyld) dårligt design." =) Det kan vi godt blive enige om, det er nok en tanketorsk et eller andet sted der er skyld i problemet. Det sjove er bare at det er en enkelt metode der er synchroniseret som bliver låst. Inde i metoden er det eneste der foregår at der bliver lavet et database kald og returneret noget data, så ikke noget kald ud af "kontrolleret" område.

Yup har icq #34115029

Så vidt jeg kunne se af api docs så er det nemlig ikke muligt at lave et stackTrace på andre tråde end den active (hvilket egentligt er for dårligt =) men håbede der var en metode over mit kendskabsniveu der kunne bruges.
Avatar billede webster Nybegynder
18. juni 2002 - 20:04 #3
Er det muligt der kan være nogle komplikationer hvis der opstår en exception inde i synchronized område? Det er kun når mit program kører på min linux server at problemet opstår, men jeg har heller aldrig kørt det over ret lang tid på min workstation (win 2k) så kan ikke sige om det kunne være relateret til en "buggy" java implementation?
Avatar billede webster Nybegynder
18. juni 2002 - 23:52 #4
endnu en tilføjelse (edit funktion?? =) Programmet er designet med henblik på multitrådning ja, da det er en chat server fungerende lidt lignende irc servere så der er gang i en hel masse tråde. Det virker som om at problemet opstår når nogle hændelser falder sammen, da der er meget stor forskel på hvor lang tid serveren kører før der opstår problemer (timer til flere dage).
Avatar billede webster Nybegynder
04. november 2002 - 18:30 #5
sorry havde glemt det her spg
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester