无法在运行的JBoss进程上"strace -p"

cur*_*rge 11 linux jboss strace

我试图使用"strace -p"附加到已经运行的JBoss进程.JBoss正在使用1.5.0_15 Java JDK.不幸的是,这不起作用 - 我只得到一个futex()结果:

# 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 ...>
Run Code Online (Sandbox Code Playgroud)

Strace适用于所有其他程序,但不适用于JBoss.当我通过strace启动进程时,它似乎工作正常.当我尝试连接到已经运行的进程时,它不起作用.

我正在使用64位Linux 2.6.18和32位Java JDK(RedHat Enterprise Linux 5.3,如果重要的话).

更新#1:

我尝试用"-d"运行它,但输出似乎没有任何洞察力,至少对我来说:


[root@]# 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
Run Code Online (Sandbox Code Playgroud)

caf*_*caf 12

如果该进程中有多个线程,则需要提供strace多个-p选项,指定每个选项的ID.看起来你已成功跟踪原始父线程,它只是在等待其他一些线程完成.

(它从您启动命令时起作用的原因strace是默认情况下,strace选择创建的新子进程并跟踪它们).

  • ps -eLm向我展示了我的方式错误.当我检查"ps -ef | grep java"的输出时,我认为没有创建任何子进程."ps -eLm"向我展示了更多的子进程.实际上,"strace -f -p PID"就是我所需要的.我一直在收到"连接超时"消息,我认为这是随机线程的错误输出.它实际上来自子线程的正确输出! (2认同)

小智 12

也许你可以试试这个:

strace -F -p PID