V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ecloud
V2EX  ›  C

sleep()会引起 coredump?

  •  
  •   ecloud · 2022-01-23 14:48:19 +08:00 · 1766 次点击
    这是一个创建于 1036 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    objc 的 pool release 我放在了 sleep 外面的一层循环。这个东西必须 speel 之后立刻释放,不然就会 core dump 。奇怪的设计,这个在 mac 上是不需要的,看来是 gnustep 本身有个什么轮询机制,会定时企图去清理内存,然后找不到 pool 的 release 句柄就死掉了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1548 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:51 · PVG 00:51 · LAX 08:51 · JFK 11:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.