我對LINUX + Java 6中,這似乎被卡住運行一個獨立的Java應用程序(沒有生成日誌) 我如何可以利用這個線程轉儲,而無需使用任何其他工具(如jstack)線程轉儲
嘗試下面的命令,但他們沒有做任何事情
kill -3 <pid>
kill -QUIT <pid>
我錯過了什麼?
我對LINUX + Java 6中,這似乎被卡住運行一個獨立的Java應用程序(沒有生成日誌) 我如何可以利用這個線程轉儲,而無需使用任何其他工具(如jstack)線程轉儲
嘗試下面的命令,但他們沒有做任何事情
kill -3 <pid>
kill -QUIT <pid>
我錯過了什麼?
您可以使用Java的VisualVM(包含在每一個JDK的bin目錄),並通過JMX連接。只需將您的JVM啓動參數(在遠程主機上)添加到
-Dcom.sun.management.jmxremote.port=PORT
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
並啓用身份驗證。
然後啓動VisualVM的(在你的客戶),並添加一個連接。
在遠程服務器上工作,但沒有VisualVM。 – 2012-03-14 10:47:29
在您的遠程服務器上,您只需啓用jmx支持,如上所示。你的客戶不是使用xserver嗎? – Stefan 2012-03-14 10:57:15
獲取從jps
命令的PID(雖然不是必要的)。
你有沒有試着用root權限?如果java進程是以root(或守護進程)權限啓動的,則必須考慮到這一點。
# kill -3 <pid>
$ sudo kill -QUIT <pid>
您還可以看到在top
輸出線按H
(不h
)。
然後,如果你識別出卡,你可以抓住的PID,使十六進制,然後用jstack
看到堆棧跟蹤。
問候。
不在root中,但與該進程的所有者具有相同的用戶。 – 2012-03-14 10:48:09
那'kill -9'(SIGKILL)呢?這將無條件地殺死這個過程。 – 2012-03-14 11:04:33
@ Christian.K我認爲他想一個線程轉儲,而不是僅僅殺死進程 – ssedano 2012-03-14 12:36:57
好的。得到它了。 「Ctrl + \」給我轉儲。 – 2012-03-14 10:15:24
請將您的評論轉換爲答案並自行接受。 – 2012-03-14 10:16:23
'殺-3'也應該工作。唯一不行的是當你看不到控制檯時。 – 2012-03-14 10:17:46