2012-03-14 49 views
1

我對LINUX + Java 6中,這似乎被卡住運行一個獨立的Java應用程序(沒有生成日誌) 我如何可以利用這個線程轉儲,而無需使用任何其他工具(如jstack)線程轉儲

嘗試下面的命令,但他們沒有做任何事情

kill -3 <pid> 
kill -QUIT <pid> 

我錯過了什麼?

+1

好的。得到它了。 「Ctrl + \」給我轉儲。 – 2012-03-14 10:15:24

+0

請將您的評論轉換爲答案並自行接受。 – 2012-03-14 10:16:23

+0

'殺-3'也應該工作。唯一不行的是當你看不到控制檯時。 – 2012-03-14 10:17:46

回答

0

您可以使用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的(在你的客戶),並添加一個連接。

在這裏看到:http://visualvm.java.net/docindex.html

+0

在遠程服務器上工作,但沒有VisualVM。 – 2012-03-14 10:47:29

+0

在您的遠程服務器上,您只需啓用jmx支持,如上所示。你的客戶不是使用xserver嗎? – Stefan 2012-03-14 10:57:15

0

獲取從jps命令的PID(雖然不是必要的)。

你有沒有試着用root權限?如果java進程是以root(或守護進程)權限啓動的,則必須考慮到這一點。

# kill -3 <pid> 
$ sudo kill -QUIT <pid> 

您還可以看到在top輸出線按H(不h)。

然後,如果你識別出卡,你可以抓住的PID,使十六進制,然後用jstack看到堆棧跟蹤。

問候。

+0

不在root中,但與該進程的所有者具有相同的用戶。 – 2012-03-14 10:48:09

+0

那'kill -9'(SIGKILL)呢?這將無條件地殺死這個過程。 – 2012-03-14 11:04:33

+0

@ Christian.K我認爲他想一個線程轉儲,而不是僅僅殺死進程 – ssedano 2012-03-14 12:36:57