2010-01-27 18 views
10

Sto tentando di utilizzare "strace -p" per collegarsi a un processo JBoss già in esecuzione. JBoss utilizza il JDK Java 1.5.0_15. Purtroppo, questo non funziona - ho solo un risultato singolo futex():
Impossibile "strace -p" su un processo JBoss in esecuzione

# 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 funziona per tutti gli altri programmi, ma non JBoss. Sembra funzionare bene quando lancio il processo tramite strace. Semplicemente non funziona quando provo ad associare a un processo già in esecuzione.

Utilizzo Linux 64.1 bit a 64 bit con un JDK Java a 32 bit (RedHat Enterprise Linux 5.3 se è importante).

Update # 1:

ho provato in esecuzione con "d", ma l'uscita non sembra essere più penetranti, almeno per me:


[[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

appartiene il superuser? –

+0

@Aidan, direi che dovrebbe essere qui supponendo che curious_george stia cercando di eseguire il debug di alcuni lavori di sviluppo. –

+0

Fino ad ora non ho mai sentito parlare di SuperUser, ma per evitare la pubblicazione incrociata lascerò qui questa domanda. Ho pensato che la maggior parte dei programmatori J2EE ha usato strace con JBoss –

risposta

11

Se sono presenti più thread all'interno di tale processo, è necessario fornire strace più opzioni -p, specificando l'ID di ciascuno. Sembra che tu stia tracciando con successo il thread genitore originale e non sta facendo altro che aspettare che finiscano altri thread.

(Il motivo per cui funziona quando si avvia il comando da strace è che per impostazione predefinita, strace preleva i nuovi processi figli creati e li traccia anche).

+0

I ' m tracciando effettivamente il thread secondario. Anche se ho provato a provare il thread padre e il thread figlio, ma non ho ottenuto altro. Il thread padre mostrava solo una chiamata wait4(), come dovrebbe essere previsto. –

+0

Sei * sicuro * c'è solo un thread figlio? Questo suona sospettosamente piccolo per un processo 'java' (nota che i singoli thread non vengono visualizzati in' ps' di default). Date un'occhiata a '/ proc//task /'. – caf

+0

(Oppure prova 'ps -eLm') – caf

0

Avete provato a utilizzare strace -d -p NNN per ottenere un output di debug strace?

Forse aggiungere un -e verbose?

È stato installato strass setuid su root in modo da poter esaminare qualsiasi processo?

+0

Ho provato a eseguirlo con "-d", come indicato nella mia modifica n. 1 (vedo che la formattazione non funziona come mi aspettavo in questa sezione) –

9

Forse si può provare questo:

strace -F -p PID

Problemi correlati