Tråddump och tråddumpsanalys
Vid problem i en lokal miljö finns det flera kraftfulla verktyg att ta till i form av profilerare och debuggers. När det stökar i en produktionsmiljö är det lite värre då man vill undvika att påverka prestanda. Ett hangrepp som man med gott samvete kan ta till i de aldra flesta produktionsmiljöer är tråddumpning , en listning av alla trådars stacktrace. Informationen är inte så hjälpsam vid tex minnesläckor men är mycket användbar för att hitta flaskhalser eller låsningar.
På unix kan tråddump tas med kill -3 #PID, windows motsvarighet är SendSignal.exe eller Ctr+break. Om man kör jdk 5 kan man använda kommandot jstack #PID, kommandot jps hänger också med jdk5 och listar javaprocesserna. På Jdk6 kan man köra jstack -l för att förutom java monitors även se låsen som hänger med nya concurrency paketet, detta kommer dock med en betydande prestandakostnad då den går igenom heapen och tittar efter instanser av AbstractOwnableSynchronizer.
Det är inte ovanligt att resultatet av en tråddump är tusentals rader och därmed mycket svåröverskådlig, tänkte därför tipsa om två tråddumps-analyserare. Båda analyserarna markerar problemlås dvs lås som många trådar väntar på, och man kan under låset se låsande tråd och de väntande trådarna. Ytterligare fördelar är att de ger en bättre läsbarhet av tråddumpen och har deadlock-detektering.
TDA är ett riktigt fult program men min favorit, finns med java web start.
Det finns flera olika vyer beroende på vad man vill se, monitors vyn har jag funnit speciellt användbar. Man kan skapa filter av vad man vill visa och funktionen long running threads visar upp trådar som ligger kvar mellan flera dumpar. Om man satt -XX:+PrintClassHistogram innehåller dumpen information om hur heapen ser ut, även denna information visas på ett snyggt sätt av TDA.
Lockness är en analyserare som eclipse plugin.
Ett bra mycket snyggare program som man dessutom inte behöver lämna eclipse för att använda. Det saknar vyer så de har klämt in allt i samma vy, kanske är en smaksak men jag gillar det inte. Finns en sökning som ung motsvarar filters i TDA. Saknar helt funktionen long running threads vilket är ett minus.
Programmen är inte på något sätt mirakelgörare men de förenklar livet avsevärt om man har stora tråddumpar.