2010-01-27 66 views
10

我正在嘗試使用「strace -p」來連接到已運行的JBoss進程。 JBoss使用1.5.0_15 Java JDK。不幸的是,這並不工作 - 我只得到一個futex的()結果:
無法對正在運行的JBoss進程執行「strace -p」

# strace -p 3388 
Process 3388 attached - interrupt to quit 
[ Process PID=3388 runs in 32 bit mode. ] 
futex(0x8f18f7c, FUTEX_WAIT_PRIVATE, 1, NULL <unfinished ...> 

strace的適用於所有其他程序而不是JBoss的。當我通過strace啓動流程時,它似乎工作正常。當我嘗試附加到已經運行的進程時,它不起作用。

我正在使用64位Linux 2.6.18和32位Java JDK(如果它很重要,請使用RedHat Enterprise Linux 5.3)。

更新#1:

我曾嘗試用「-d」運行它,但產量不出現任何更深入的,至少對我說:


[[email protected]]# strace -d -e verbose=all -p 3388 
Process 3388 attached - interrupt to quit 
[wait(0x137f) = 3388] 
pid 3388 stopped, [SIGSTOP] 
[wait(0x57f) = 3388] 
pid 3388 stopped, [SIGTRAP] 
[ Process PID=3388 runs in 32 bit mode. ] 
futex(0x8f18f7c, FUTEX_WAIT_PRIVATE, 1, NULL 
+0

屬於超級用戶? – 2010-01-27 23:05:51

+0

@Aidan,我估計它應該是這裏假設curious_george試圖調試一些開發工作。 – 2010-01-27 23:09:19

+0

我從來沒有聽說過超級用戶到現在爲止,但要避免交叉張貼在這裏我要離開這個問題。我推斷大多數J2EE程序員已經在JBoss中使用了strace – 2010-01-27 23:26:43

回答

11

如果該進程中有多個線程,則需要給strace多個-p選項,指定每個選項的ID。它看起來像你正在成功地追蹤原來的父線程,並且它什麼都不做,只是等待其他線程完成。

(當您從strace開始命令時,它的工作原理是默認情況下,strace會選取創建的新子進程並對其進行跟蹤)。

+0

I' m實際上是在跟蹤子線程。雖然我確實嘗試了對父線程和子線程的接口,但我沒有得到任何進一步的信息。正如應該預料的那樣,父線程只顯示一個wait4()調用。 – 2010-01-27 23:41:37

+0

你確定*只有一個子線程?對於'java'進程來說這聽起來很少(注意單個線程默認情況下不會在'ps'中顯示)。看看'/ proc//task /'。 – caf 2010-01-28 00:07:23

+0

(或者試試'ps -eLm') – caf 2010-01-28 00:13:08

0

有你嘗試使用strace -d -p NNN來獲得一些strace調試輸出?

也許添加-e詳細?

已將strace安裝到root用戶,因此您可以查看任何進程?

+0

我曾嘗試使用「-d」運行它,正如我在上面的編輯#1中所指出的那樣(我看到格式化不像本節中預期的那樣) – 2010-01-27 23:34:35

9

也許你可以試試這個:

strace的-F -p PID