sleep()会引起 coredump?

2022-01-23 14:48:19 +08:00
 ecloud

其实是一个 objc 的程序,用 gnustep 在 centos8 上编译,功能什么的都挺正常,编译器用 clang 。

这个程序里面有一个 sleep(5)轮询

然后我发先,在 sleep 跑到一定程度的时候就会 coredump

加了 log ,发现就是在 sleep 之后 coredump 的,并且试着用空数据跑(完全没有内存消耗),一样的 coredump 目前正在 mac 测试

我现在怀疑是 redis 库的问题,因为我的程序会每 sleep(5)之后去 RPOP ,得到空之后继续 sleep

但是我另外一个类似的程序是 BRPOP ,除了不需要 sleep 以外其余的都差不多,一直跑一个星期( BRPOP 100 秒,总计应该有千万轮询了吧)都没有任何问题,有数据没数据都没问题

1667 次点击
所在节点    C
2 条回复
wty
2022-01-23 15:04:17 +08:00
遇到过 FD 泄露然后 sleep 时候会挂
ecloud
2022-01-23 15:06:46 +08:00
好吧,我搞明白了

objc 的 pool release 我放在了 sleep 外面的一层循环。这个东西必须 speel 之后立刻释放,不然就会 core dump 。奇怪的设计,这个在 mac 上是不需要的,看来是 gnustep 本身有个什么轮询机制,会定时企图去清理内存,然后找不到 pool 的 release 句柄就死掉了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/830070

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX