export go 函数然后编译成 c 动态库,这里完美注意了 cgo 的内存搬运问题。
go build -o iface.so -buildmode=c-shared -ldflags "-w -s" iface.go
然后在 OpenResty 下用 luaffi load 这个动态库,平时使用没什么问题。最近发现在 reload 比较频繁下会偶发 reload 卡住。
上去用 gdb -p <nginx master="" pid=""></nginx>
bt 当前栈顶在这个 go 动态库中,由于没有调试符号,只能反汇编。
diss/r $rip,查看 syscall 前的 rax 值,发现当前 master 阻塞在 futex syscall 上,发生了死锁。
1
kofj 2019-05-27 22:12:32 +08:00
还能这么玩儿,mark 一下
|
2
chennqqi 2019-05-28 09:42:01 +08:00
把 -ldflags "-w -s" 去掉就有符号了,挂上去调试吧
|
3
icexin 2019-05-28 11:53:51 +08:00
fork+多线程会有很多 bug
|
4
juzipeek 2019-05-28 12:27:09 +08:00
reload 时动态是否有变化,如果有变化容易出现问题
|