Když firma Oracle koupila společnost BEA, mnozí byli zvědaví, jakou politiku zaujme Oracle k produktové WebLogic a JRockit. Firma Oracle nedávno zpřístupnila JRockit JRE i JDK zdarma ke stažení, a to včetně Mission Control, což je extrémně užitečný nástroj pro monitoring a profiling Java aplikacích, a to nejen serverových. Jeho hlavní výhodou je vysoký výkon – nazatěžuje běžící aplikaci (dokumentace udává maximální zpomalení do 3 % – a to ještě za předpokladu, že je monitorování aktivní) a je tedy vhodný pro monitoring produkčních serverů (Tomcat, Jetty, Oracle WebLogic a tak dále).
Po instalaci JDK můžeme spustit Mission Control pomocí příkazu jrmc (JDK musí být v cestě PATH). Nyní stačí spustit proces, který chceme monitorovat, s parametrem -Xmanagement. Proces se automaticky objeví v Mission Control konzoli ve větvi Discovered/Local, takže se na proces můžeme pravým tlačítkem připojit (Start Console).
Mission Control nabízí „živé“ sledování pomocí modulu Console, dále modul pro detekci memory leaků Memleak a k tomu navíc JRA Recorder – modul umožňující sbírat výkonnostní data a ty pak v Mission Control konzoli detailně analyzovat.
V následujících odstavcích se budu věnovat možnosti připojení na vzdálený proces v JRockit JDK 1.5 nebo vyšší. Od této verze se totiž změnil zúůsob připojování na monitorovacího agenta. Aby monitorování vůbec fungovalo, je nejprve nutné nastavit login autentifikaci a autorizaci pro JMX. Jelikož je tento postup netriviální (ale je v dokumentaci – spočívá v editaci souboru jre/lib/management/jmxremote.password a nastavení správných práv na UNIXu) a protože Mission Control používám k vývoji, autentifikaci jsem úplně vypnul (soubor jre/lib/management/management.properties):
com.sun.management.jmxremote.authenticate=false
Nyní je nutné spustit proces s parametrem -Xmanagement, JRockit využije JMX/RMI komunikačního mechanismu a můžete specifikovat hostname v konzoli a k procesu se připojit. Port pro RMI registry je implicitně 7091, ale můžete jej změnit pomocí -Xmanagement.port=7091 volby, nicméně pokud používáte firewall, tak se stejnak k procesu nepřipojíte (i když tento port na firewallu povolíte). Protokol RMI se totiž s klientem dohodne na dalším portu, který je náhodný (a přes firewall tedy nemusí projít). Jediným řešením je bohužel vytvořit si vlastního RMI/JMX agenta, nebo firewall vypnout.
Diskuze