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 上,发生了死锁。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.