webman和swow都是最新版,环境linux,使用下面代码查询数据库并返回结果后,退出webman就会报警告:
public function index(): Response
{
$value = \think\facade\Db::query('SELECT NOW() as now, sleep(5)'); //模拟慢查询
return json($value); // [{"now":"2025-02-06 23:41:03","0":"2025-02-06 23:41:03"}]
}
PHP Warning: Event loop close failed, reason: Resource busy or locked in Unknown on line 0
Warning: Event loop close failed, reason: Resource busy or locked in Unknown on line 0
[--I] signal 0x7f37ea21ec50
[-AI] async 0x7f37ea21ea90
[R--] tcp 0x7f37f3512d08
zend_mm_heap corrupted
worker[webman:23245] exit with status 6
如果不使用Db查询就不会有警告,请问我是否哪里理解有错呢?
你的查询一直没返回,退出webman时这个协程无法正常关闭,给个Warning不过分吧。
我是等待它返回后才关闭的,我甚至等了几分钟再关闭仍然有警告。。
本地测试正常
奇怪,我还在两台Linux服务器上测试都有这个警告,我以为是Swow的什么问题。。
这个报错网上还不好找,我再好好想想,先谢谢老大
刚又测试了下,发现使用 \think\facade\Db::query 就会出现警告,如果用PDO:
(new \PDO('mysql:host=127.0.0.1;dbname=xxx', 'xxx', 'xxx'))->query('SELECT NOW() as now, sleep(5)')->fetchAll();
就不会有警告,是不是ThinkORM内部有什么资源没释放。。