信号量密钥在一段时间后丢失

时间:2018-02-24 08:03:43

标签: php semaphore shared-memory

我有一个使用共享内存的父子进程。 孩子将数据放入共享内存大约每秒10次。 父母和孩子在写/读时使用信号量来锁定资源。 这个解决方案可以工作几个小时,然后我开始收到警告:

  

PHP警告:sem_acquire():无法获取密钥0x4101f1fb:第350行的script.php中的参数无效   
PHP警告:sem_release():SysV信号量140105644163240(密钥0x4101f1fb)当前未在第354行的script.php中获取

看起来脚本超出了某些限制并且信号量被破坏了,但我无法在 ipcs 中找到任何指向当前限制/使用的内容。

我还尝试 sem_get 以获取新的信号量ID但我无法通过共享内存将其传递给子级 shm_put_var 无法使用资源。

在长期运行过程中处理信号量的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

可能是PHP中一直存在的错误:

https://bugs.php.net/bug.php?id=44109

第一个(也是唯一一个)评论涉及约32000个信号灯标识符,并且该数字不可调整...