其实是一个 objc 的程序,用 gnustep 在 centos8 上编译,功能什么的都挺正常,编译器用 clang 。
这个程序里面有一个 sleep(5)轮询
然后我发先,在 sleep 跑到一定程度的时候就会 coredump
加了 log ,发现就是在 sleep 之后 coredump 的,并且试着用空数据跑(完全没有内存消耗),一样的 coredump 目前正在 mac 测试
我现在怀疑是 redis 库的问题,因为我的程序会每 sleep(5)之后去 RPOP ,得到空之后继续 sleep
但是我另外一个类似的程序是 BRPOP ,除了不需要 sleep 以外其余的都差不多,一直跑一个星期( BRPOP 100 秒,总计应该有千万轮询了吧)都没有任何问题,有数据没数据都没问题
1
wty 2022-01-23 15:04:17 +08:00
遇到过 FD 泄露然后 sleep 时候会挂
|
2
ecloud OP 好吧,我搞明白了
objc 的 pool release 我放在了 sleep 外面的一层循环。这个东西必须 speel 之后立刻释放,不然就会 core dump 。奇怪的设计,这个在 mac 上是不需要的,看来是 gnustep 本身有个什么轮询机制,会定时企图去清理内存,然后找不到 pool 的 release 句柄就死掉了 |