2013-11-22 8 views
6

Ich bin wirklich verwirrt über: In meinem Windows 2008r2, habe ich einen Windows-Dienst, in der Tat ist es ein Java-Fortschritt läuft als SYSTEM Benutzer. Jetzt verwende ich Jstack roh zum Service. Aber es Fehler auftreten:java jstack Werkzeug unzureichenden Speicher oder unzureichende Berechtigung zum Anhängen

insufficient memory or insufficient privilege to attach 

Aber wenn ich jstack die Optionen -F verwenden, kann es fein arbeiten. Ich sehe die Quelle des JDK, es verwendet eine Klasse BugSpotAgent, um oben zu beenden.

Ich mag die Ursache weiß, dass ich nicht jstack Rawly verwenden kann, ist es das SYSTEM Benutzerberechtigungsproblem? Ich habe auch versuchen, psexec.exe (ein Tool) zu verwenden, um meine jstack Rawly laufen (Das bedeutet, werde ich SYSTEM Benutzer verwenden jstack laufen), aber es kann immer noch nicht.

Können Sie mir helfen?

Danke & Grüße!

+0

Siehe auch [jstack und nicht genügend Speicher diesen Befehl zu verarbeiten verfügbar ist] (http: //stackoverflow.com/questions/906620/jstack-and-not-enough-storage-is-available-to-process-this-command) zur Problemumgehung für Windows-Dienste. – Vadzim

Antwort

4

jstack kann nur ein Verfahren Verriegelung an Gestartet von demselben Benutzer in Same Session. Wenn keine Sitzung angegeben wird, wird der Befehl psexec an die Konsolensitzung angehängt und löst diesen Fehler beim Versuch, Thread-Dump abzurufen, aus.

Die Lösung ist, den Benutzer und Sitzung mit psexec verwendet, um sicherzustellen ist das gleiche wie ein für das Ziel Java-Prozess verwendet.

Wenn es von einem normalen Benutzer gestartet wurde, a. Verwenden Sie die gleichen Benutzeranmeldeinformationen für die Anmeldung ohne -s oder -h Flagge b. finde die Sitzungs-ID, in der der Prozess gestartet wurde. (Sie können es mit dem Task-Manager finden und zu den Tab-Benutzer gehen). Benutzen Sie diese Sitzungs-ID mit dem Flag -i

psexec \\server-name -u username -p password -i session-id command

z.B.

psexec \\192.168.1.1 -u john -p pass123 -i 1 jstack.exe 4242

Hinweis: Wenn der Java-Prozess wird von einem Systembenutzer verwenden, um den Flag gestartet wurde es

Verwandte Themen