java - strace'ing java 进程时有很多 SIGSEGV

标签 java segmentation-fault strace

当我在 CI 服务器(实际上是 maven 构建)上调试其中一个单元测试时,发生了一些有趣的事情。我使用 strace -ff -e trace=network -p [pid] 连接到 java 进程以跟踪构建过程的网络 Activity 。这就是我所看到的:

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)

因此,我们有一些网络 Activity (这是我实际搜索的内容)和大量 SIGSEGV 信号。

构建正确完成(只有一个失败的测试)。情况可确定并一遍又一遍地重现。这是什么意思?

最佳答案

由于这是 java,这意味着您的 JVM 正在使用 SIGSEGV 进行某些操作。常见用途包括

  • 空指针取消引用——JVM 捕获 SIGSEGV 到地址 0 并将它们转换为 NullPointerExceptions

  • 垃圾收集写入障碍——很少更改的页面被标记为只读,并且 SEGV 捕获对它们的写入。这样垃圾收集器就不必一直重新扫描所有内存。

关于java - strace'ing java 进程时有很多 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731784/

相关文章:

java - 对文件中的 double 求和

java - 为什么我在这里收到 InvalidUseOfMatchersException?

C - 段错误(核心转储)

c - 线程访问静态变量导致段错误

linux - 为什么STRACE显示EAGAIN(资源暂时不可用)

hadoop - strace'ing sqoop 命令时资源暂时不可用 futex

Java,指向内存中同一个对象的引用变量

java - 表格单元格自动右对齐

c - 返回结构并保存在不同 .c 文件中的结构变量中

c - 没有 mmap2 系统调用 strace 的内存分配?