問題描述
當(dāng)我在 CI 服務(wù)器(實際上是 maven 構(gòu)建)上調(diào)試其中一個單元測試時,發(fā)生了一些有趣的事情.我使用 strace -ff -e trace=network -p [pid]
連接到 java 進(jìn)程以跟蹤構(gòu)建過程的網(wǎng)絡(luò)活動.這就是我所看到的:
Interesting stuff occurred while I debug one of the unit tests on CI server (maven build actually). I connect to java process with strace -ff -e trace=network -p [pid]
to trace network activity of build process. And that's what I saw:
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)
所以,我們有一些網(wǎng)絡(luò)活動(這是我實際搜索的內(nèi)容),還有很多 SIGSEGV
信號.
So, there we have some network activity (it's what I am actually search for), and a lot of SIGSEGV
signals.
構(gòu)建正確完成(只是一個損壞的測試).情況可確定并一遍又一遍地再現(xiàn).這是什么意思?
Build finished correctly (just one broken test). Situation determinable and reproduced over and over again. What does this mean?
推薦答案
既然是java,就意味著你的JVM正在使用SIGSEGVs.常見用途包括
Since this is java, it means that your JVM is using SIGSEGVs for something. Common uses include
空指針解引用——JVM 將 SIGSEGV 捕獲到地址 0 并將它們轉(zhuǎn)換為 NullPointerExceptions
null pointer dereferences -- the JVM catches SIGSEGVs to address 0 and turns them into NullPointerExceptions
垃圾收集寫屏障——很少更改的頁面被標(biāo)記為只讀,SEGV 捕獲對它們的寫入.這樣垃圾收集器就不必一直重新掃描所有內(nèi)存.
garbage collection write barriers -- rarely changed pages are marked read only and SEGVs catch writes to them. This way the garbage collector doesn't have to rescan all of memory all of the time.
這篇關(guān)于strace'ing java 進(jìn)程時有很多 SIGSEGV的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!