使用下面的批處理文件時採取在Windows控制檯shell中運行Java服務的核心轉儲我得到這個錯誤:JDK1.6 JMAP.EXE:遠程線程失敗原因不明
The parent directory name of this script is: MyDIR
Install dir is: C::\InstallDIR
The process id of window called MyDIR is 520
Taking core dump... please wait...
C::\InstallDIR\Javasoft\bin\jmap.exe -dump:file=heap.bin 520
Dumping heap to C:\InstallDIR\MyDIR\heap.bin ...
Exception in thread "main" java.lang.InternalError: Remote thread failed for
unknown reason
at sun.tools.attach.WindowsVirtualMachine.enqueue(Native Method)
at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:78)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:195)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:162)
at sun.tools.jmap.JMap.dump(JMap.java:224)
at sun.tools.jmap.JMap.main(JMap.java:122)
Press any key to continue . . .
而且這裏是腳本(-XX:的OnError = 「script.bat」):
@echo off
setlocal
set PATH=%PATH%;C:\InstallDIR\Javasoft\jre\bin\server
for /F "tokens=2,3,4,5,6,7 delims=\" %%i in ('cd') do (
set i=%%i
set j=%%j
set k=%%k
set l=%%l
set m=%%m
set n=%%n
)
set HOME=%i%
if not "%i%" == "" (set SITE=%i%
) else (goto end:)
if not "%j%" == "" (set SITE=%j%
) else (goto end:)
if not "%k%" == "" (set SITE=%k%
) else (goto end:)
if not "%l%" == "" (set SITE=%l%
) else (goto end:)
if not "%m%" == "" (set SITE=%m%
) else (goto end:)
if not "%n%" == "" (set SITE=%n%
) else (goto end:)
:end
echo The parent directory name of this script is: %SITE%
echo Install dir is: %HOMEDRIVE%:\%HOME%
echo.
:: kill process using window TITLE to find PID
FOR /F "tokens=2" %%I in ('TASKLIST /NH /FI "WINDOWTITLE eq %SITE%"') DO SET PID=%%I
ECHO The process id of window called %SITE% is %PID%
ECHO Taking core dump... please wait...
%HOMEDRIVE%\%HOME%\Javasoft\bin\jmap.exe -dump:format=b,file=heap.bin %PID%
ECHO Killing JVM %PID%...
TASKKILL /PID %PID%
:: then , restart server
.\startServer.bat
ping -n 12 127.0.0.1>nul
if ERRORLEVEL == 0 (
exit
) else (
pause
)
我可以jconsole.exe運行,重視過程,容易傾倒的核心。爲什麼從命令行不是這麼簡單?我知道JMap的linux版本有更多的選項和功能。這就是我在這裏遇到的情況:JMap的windows版本無法完成這個簡單的事情嗎?
您的腳本是否與java進程具有相同的憑據? – 2011-06-09 20:14:24
是的,它由同一個用戶運行。這是Windows XP,所以權限在這個意義上並不嚴格。 – djangofan 2011-06-09 20:24:30