2010-11-29 8 views
6

Diese Frage kann bei Java JVM sehr grundlegend sein. Wenn ich ein eigenständiges Java-Programm habe und wenn zum Beispiel 5 Prozesse dieses Programms zu einer bestimmten Zeit auf dem Server laufen, können wir sagen, dass diese 5 Java-Prozesse in 5 JVMs laufen?JVM- und Java-Linux-Prozess

Mit Prozess, meine ich den Linux-Prozess hier. Wenn ich ps -ef |grep java ausführen, werden 5 Java-Prozesse angezeigt.

+0

http://code.google.com/p/jvmtop/ zeigt alle jvms an – MRalwasser

Antwort

10

Ja, das ist richtig. Es gibt eine JVM pro java Prozess.

+0

Können wir sagen, dass # von Java-Prozessen gleich # von JVMs ist, die in allen Fällen laufen? – Gnanam

+2

In einem normalen Linux-Setup, wie in Ihrer Frage beschrieben. Es gibt mögliche Lösungen, um mehr als eine JVM pro Prozess zu versuchen. Sehen Sie zum Beispiel [diesen (alten) Artikel] (http://onjava.com/pub/a/onjava/2001/09/25/optimization.html). –

0

Hängt von der JVM und nativen Bibliotheken ab. In ps werden möglicherweise JVM-Threads mit unterschiedlichen PIDs angezeigt. Im Allgemeinen haben die Kind-PIDs Eltern-PIDs mit Java-Prozessen als solche, die Threads sind.

Sie können nicht sicher sagen, dass die # von Linux-Java-Prozessen == # von instanziierten JVMs.

+1

Unter Linux verwendet die JVM echte native Threads, die Prozessen * ähnlich * sind. Sie sind jedoch nicht dasselbe, da nur ein Prozess seinen eigenen Adressraum hat. –

+0

@ Matthew, natürlich, aber beide können mit 'ps' gesehen werden. – Xailor

+0

Ich adressiere deinen letzten Absatz. Ich denke, man kann das sagen (Prozesszahl * entspricht * der JVM-Zählung), unabhängig von der Ausgabe von ps. –

4

Sie können den Befehl jps (aus dem bin-Ordner von JDK, wenn er nicht in Ihrem Pfad ist) ausführen, um herauszufinden, welche Java-Prozesse (JVMs) auf Ihrem Computer ausgeführt werden.

+0

+1. Danke, ich kannte diesen Befehl vorher nicht. – Gnanam

+1

@Gnanam: Sie werden den Befehl 'jps' in einer anderen Situation nützlich finden. Es wird normalerweise verwendet, um die Prozess-ID Ihres Java-Prozesses herauszufinden, die an eine Anwendung wie einen Profiler wie VisualVM (aufgerufen mit 'jvisualvm' comamnd) oder das' jhat'-Dienstprogramm zur Übernahme von Heap-Dumps übergeben werden kann. – CruiZen

+1

Nochmals vielen Dank, dass Sie mir die Existenz eines weiteren Heap-Analyse-Tools ['jhat'] mitgeteilt haben (http://download.oracle.com/javase/6/docs/technotes/tools/share/jhat.html). – Gnanam