GNU/Linux >> Znalost Linux >  >> Linux

Jak sledovat java-program?

Jak zmínil ckhan, jstack je skvělé, protože poskytuje úplnou stopu zásobníku všech aktivních vláken v JVM. Totéž lze získat na stderr JVM pomocí SIGQUIT.

Dalším užitečným nástrojem je jmap který dokáže zachytit výpis haldy z procesu JVM pomocí PID procesu:

jmap -dump:file=/tmp/heap.hprof $PID

Tento výpis haldy lze načíst v nástrojích jako visualvm (který je nyní součástí standardní instalace Oracle java sdk s názvem jvisualvm). Kromě toho se VisualVM může připojit k běžícímu JVM a zobrazovat informace o JVM, včetně zobrazení grafů interního využití CPU, počtu vláken a využití haldy – skvělé pro sledování úniků.

Další nástroj, jstat , může shromažďovat statistiky garbage collection pro JVM po určitou dobu podobně jako vmstat, když je spuštěn s číselným argumentem (např. vmstat 3 ).

Konečně je možné použít Java Agenta k prosazení instrumentace na všech metodách všech objektů při načítání. Knihovna javassist může pomoci, aby to bylo velmi snadné. Je tedy možné přidat vlastní trasování. Nejtěžší na tom by bylo najít způsob, jak získat výstup trasování pouze tehdy, když to chcete, a ne stále, což by pravděpodobně zpomalilo JVM na procházení. Existuje program nazvaný dtrace který funguje takovým způsobem. Zkoušel jsem to, ale nebyl moc úspěšný. Všimněte si, že agenti nemohou instrumentovat všechny třídy, protože ty potřebné k bootstrap JVM jsou načteny dříve, než může agent instrumentovat, a pak je příliš pozdě na to, aby k těmto třídám přidávali instrumentaci.

Můj návrh - začněte s VisualVM a zjistěte, zda vám to řekne, co potřebujete vědět, protože může zobrazit aktuální vlákna a důležité statistiky pro JVM.


Stejně marně při ladění programů, které se v systému Linux pokazily, můžete použít podobné nástroje k ladění běžících JVM ve vašem systému.

Nástroj č. 1 – jvmtop

Podobné jako top , můžete použít jvmtop, abyste viděli, jaké třídy jsou v rámci běžících JVM ve vašem systému. Po instalaci jej vyvoláte takto:

$ jvmtop.sh

Jeho výstup má podobný styl, aby vypadal jako nástroj top :

 JvmTop 0.8.0 alpha   amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46

Nástroj č. 2 – jvmmonitor

Další alternativou je použití jvmmonitor. JVM Monitor je Java profiler integrovaný s Eclipse pro monitorování využití CPU, vláken a paměti Java aplikacemi. Můžete jej použít buď k automatickému vyhledání běžících JVM na localhostu, nebo se může připojit ke vzdáleným JVM pomocí [email protected]

Nástroj č. 3 – visualvm

visualvm je pravděpodobně „nástroj“, po kterém sáhnout při ladění problémů s JVM. Jeho sada funkcí je docela hluboká a můžete se podívat na vnitřnosti velmi do hloubky.

Profilujte výkon aplikace nebo analyzujte alokaci paměti:

Převzít a zobrazit výpisy vláken:

Odkazy

  • výukový program Visualvm

Zvažte jstack .Ne úplně odpovídá strace , spíše pstack -analogové, ale alespoň vám včas poskytne obrázek snímku. Mohli byste je spojit dohromady, abyste získali hrubou stopu, kdybyste museli.

Viz také návrhy v tomto článku SO:https://stackoverflow.com/questions/1025681/call-trace-in-java


Linux
  1. Linux – Jak sledovat program Java?

  2. Jak odblokovat IP v CSF

  3. Jak upgradovat Ubuntu 20.04 na Ubuntu 21.04

  1. Jak trasovat Python skripty pomocí trace.py

  2. Jak sledovat IO operace jednotlivých souborů v Linuxu?

  3. Jak můžeme vysledovat problémy s padáním programů v Linuxu?

  1. Jvm Daemon?

  2. Jak sledovat síťovou aktivitu příkazu?

  3. Jak povolit IPtables TRACE Target na Debian Squeeze (6)