Frage

Ich habe gelesen Visual VM Remote über ssh aber ich glaube, ich habe nicht ganz verstanden, weil es für mich nicht funktionierte :-( Bitte kann jemand ein Beispiel?

ssh -D 9696 login@ip.of.external.machine und visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true beginnt visualvm, aber keine Prozesse der externen Maschine angezeigt (nur die einheimischen wie visualvm selbst).Außerdem manchmal (aber nicht immer) bekam ich die Meldung "Kanal 3:open failed:Verbindung fehlgeschlagen:Verbindung verweigert" in meinem ssh-Fenster.

Irgendeine Hilfe?

War es hilfreich?

Lösung

Sie müssen entweder auf der Remote-Seite laufen jstatd oder eine JMX-Verbindung angeben Host verwenden: Port.

Jstatd:

jstatd -J-Djava.security.policy=permissions.txt [-p port]

Danach:. Eine Remote-Verbindung mit dem Zielcomputer hinzufügen und auf den Eigenschaften dieser Remote-Verbindung die jstatd Verbindung konfiguriert

(permissions.txt enthält zum Beispiel dieses:

grant {
  permission java.security.AllPermission;
};

Edit: (Antwort Kommentar)

  1. ssh -D 9696 me@remote und führt jstatd wie oben auf der Remote-Befehlszeile. Wenn Sie jstatd wollen auf einem anderen Port zu sein, als die Standard-1099, verwenden Sie die -p Argument jstatd.
  2. laufen visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true auf der lokalen Maschine
  3. in der visuellen vm: fügen Sie neue Remote-Verbindung und Remote als Host und dem Port für jstatd angeben (1099 für Standard, oder was Sie mit -p angegeben beim Laufen jstatd)

    Sie sollten nun die Prozesse auf der entfernten Seite in VisualVM

  4. siehe

Andere Tipps

Ich habe eine andere Lösung mit Standard-SSH-Tunneling und kein Firewall-Ports zu öffnen. Für mich ist SOCKS-Proxy nicht.

Starten Sie Ihre JVM mit Optionen:
      -Dcom.sun.management.jmxremote = true
      -Dcom.sun.management.jmxremote.ssl = false
      -Dcom.sun.management.jmxremote.authenticate = false
      -Dcom.sun.management.jmxremote.port = [port1]
      -D java.rmi.server.hostname = localhost
      -Dcom.sun.management.jmxremote.rmi.port = [port2]

Der wichtigste Teil ist "server.hostname = localhost". Darüber hinaus explizit beide Ports definieren (connect + "random" RMI-Port), "jmxremote.rmi.port" benötigt mindestens Java 7 Update 4 (ich irgendwo gelesen, nicht diese Informationen überprüfen - verwenden "lsof -i" auf Server-Maschine, die wirklich verwendeten Ports zu überprüfen).

(Natürlich können Sie die Authentifizierung oder SSL verwenden.)

Eine Verbindung via ssh auf dem Server und senden Sie Ihre lokale port1 und port2 zu localhost:. Port1 | 2 eine der Server

In VisualVM offen eine JMX-Verbindung zu localhost:. Port1 (ohne Proxy-Einstellung)

hatte ich das Problem von jstatd auf localhost zu binden, so hatte ich den Typen

jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>

auch für jvisualvm i verwenden diese Parameter statt

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>

auf diese Weise, durch den SSH-Proxy verbindet, könnte ich die echte IP-Adresse meines Remote-Rechner verwenden.

von dieser Antwort Stehlen ich mich eine vollständige Erinnerung an href="http://www.endeois.io/blog/-/blogs/jstatd-and-jvisualvm-remoting"> .. ich hoffen, dass Sie nichts dagegen Ankon Vielen Dank für diese durch die Art und Weise:)

Ich habe das gleiche Problem, während jvisualvm zu einer Remote-Anwendung über ssh zu verbinden.

Dieses Tutorial hat mir geholfen, mein Problem zu lösen. http://issamben.com/how-to-monitor-remote- jvm-over-ssh /

Um dieses Problem zu lösen, stellen Sie sicher:

  • Sie setzen zwei Port in der JVM-Konfiguration

     -Dcom.sun.management.jmxremote.ssl=false 
     -Dcom.sun.management.jmxremote.authenticate=false 
     -Dcom.sun.management.jmxremote.port=9010
     -Dcom.sun.management.jmxremote.rmi.port=9011
     -Djava.rmi.server.hostname=localhost
     -Dcom.sun.management.jmxremote.local.only=false
    
  • SSH-Tunnel richtig etabliert

     ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
    

Ich fand auch, dass die JVM Argumente:

-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true

hat auf dem Build nicht arbeiten, ich bin mit 1.3.2.

Deshalb habe ich die Extras> Optionen> Netzwerk und legen Sie es manuell unter den SOCKS-Einstellungen.

ABER VisualVM tat immer noch nicht die Remote-Prozesse finden. Ich entfernte dann die „Kein Proxy-Hosts“ Hören von localhost, da dies es wahrscheinlich blockiert.

fand ich, dass in den JVM-Argumenten für den Proxy nicht funktionieren. Mindestens in der Version 1.3.3 (Build 111013). Einstellen des Proxy in Extras> Optionen> Netzwerk funktionierte für mich. Auch systemweite Proxy-Einstellungen sollten jedoch funktionieren per Definition es alle anderen Netzwerkverbindungen betrifft.

Versuchen Sie eine andere Version von jvisualvm (zB den neuesten von https://visualvm.github.io/ download.html )

Ich kann es nicht mit jvisualvm funktioniert, da es nicht das SOCKS-Proxy verwendet hat (ich sehe alles nicht -v -D 9696 in ssh jvisualvm bezogen). Remote-Anwendungen erschienen nie in jvisualvm. VisualVM jedoch zeigte sie nach einigen Sekunden.

Ich weiß, diese Frage ist alt, aber ich schlage vor, die einfachere Lösung anstelle von jstat.

nur die Verwendung von SSH und Jvisualvm

  1. ssh mit sockproxy (ex-ssh -D 6666 host@123.123.123.123 )
  2. führen Sie jvisualvm mit Socke ( jvisualvm.exe -J-DsocksProxyHost=localhost -J-DsocksProxyPort=6666 )
  3. fügen Sie JXM-host (ex :234.234.234.234:16000 )

Verwenden Sie jvisualvm einfache Möglichkeit zum erkennen von Speicher und überwachen der CPU -, RAM-Anwendung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top