2010-09-17 7 views
13

Interesujące rzeczy miały miejsce podczas debugowania jednego z testów jednostkowych na serwerze CI (maven build faktycznie). Łączę się z procesem java za pomocą strace -ff -e trace=network -p [pid], aby śledzić aktywność sieciową procesu budowania. A to, co widziałem:Wiele SIGSEGV podczas strace'ing proces java

Process 26324 attached 
Process 26325 attached (waiting for parent) 
Process 26325 resumed (parent 26312 ready) 
Process 26325 detached 
Process 26324 detached 
Process 26320 detached 
Process 26317 detached 
Process 26308 resumed 
[pid 26308] --- SIGCHLD (Child exited) @ 0 (0) --- 
Process 26307 resumed 
Process 26308 detached 
[pid 26310] --- SIGCHLD (Child exited) @ 0 (0) --- 
Process 26310 detached 
[pid 25551] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
Process 26309 detached 
Process 26307 detached 
[pid 25717] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
[pid 25715] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
[pid 25713] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
[pid 25551] socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 163 
[pid 25551] setsockopt(163, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 
[pid 25551] bind(163, {sa_family=AF_INET, sin_port=htons(6590), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 
Process 26471 attached (waiting for parent) 
Process 26471 resumed (parent 25551 ready) 
[pid 25551] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
[pid 25551] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
[pid 26471] recvfrom(163, <unfinished ...> 
[pid 25551] socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 164 
[pid 25551] setsockopt(164, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 
[pid 25551] bind(164, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 
[pid 25551] getsockname(164, {sa_family=AF_INET, sin_port=htons(45728), sin_addr=inet_addr("0.0.0.0")},[16]) = 0 
[pid 25551] --- SIGSEGV (Segmentation fault) @ 0 (0) --- 
[pid 26471] <... recvfrom resumed> 0x8e80618, 65536, 0, 0x6ef6aea0, 0x6ef6ae9c) = ? ERESTARTSYS (To be restarted) 
[pid 26471] --- SIGRT_29 (Real-time signal 27) @ 0 (0) --- 
Process 26471 detached 
Process 26472 attached (waiting for parent) 
Process 26472 resumed (parent 25551 ready) 
Process 26473 attached (waiting for parent) 
Process 26473 resumed (parent 25551 ready) 

Tak, nie mamy pewną aktywność sieciową (to co ja właściwie szukać), a wiele SIGSEGV sygnałów.

Kompilacja zakończona poprawnie (tylko jeden uszkodzony test). Sytuacja możliwa do ustalenia i powielana w kółko. Co to znaczy?

Odpowiedz

17

Ponieważ jest to Java, oznacza to, że JVM używa czegoś SIGSEGV. Typowe zastosowania obejmują

  • zerowe dereferences pointer - JVM łapie SIGSEGVs zająć 0 i zamienia je w NullPointerExceptions

  • zbiórki śmieci zapisu bariery - rzadko zmieniane strony są zaznaczone tylko do odczytu i SEGVs haczyk zapisuje im. W ten sposób śmieciarz nie musi cały czas skanować całej pamięci.

+1

Bardzo interesujące, dziękuję! Czy możesz podać linki, w których mogę znaleźć więcej informacji na ten temat? –

+0

Czy to nieszkodliwe wtedy, czy powinno być adresowane? Widzę podobne występowanie w mojej aplikacji działającej na solaris przez kratownicę. – Tom

+1

Myślę, że nie trzeba się martwić :) –

Powiązane problemy