PHP Swoole 通知 ERRNO 1005

问题描述

当 Swoole 处于高负载和大量请求时,我不断收到此日志:

[2021-01-24 16:07:22 *33833.2] 通知完成 (ERRNO 1005): session#21022 不存在
[2021-01-24 16:07:22 *33833.2] 通知完成 (ERRNO 1005): session#21022 不存在
[2021-01-24 16:07:22 *33833.2] 通知完成(错误号 1005): session#21022 不存在
[2021-01-24 16:07:22 *33833.2] 通知完成 (ERRNO 1005): session#21022 不存在
[2021-01-24 16:07:39 *33835.4] 通知完成(错误号 1005): session#21025 不存在
[2021-01-24 16:07:39 *33835.4] 通知完成 (ERRNO 1005): session#21025 不存在
[2021-01-24 16:07:39 *33835.4] 通知结束 (ERRNO 1005): session[21025] 已关闭



[2021-01-23 14:07:22 *5300.3] 注意 PHP_swoole_http_onReceive (ERRNO 1005): session[10002] 关闭
[2021-01-23 14:07:22 *5300.3] 注意 PHP_swoole_http_onReceive (ERRNO 1005): session[10042] is closed
[2021-01-23 14:08:21 *5326.29] 注意 PHP_swoole_http_onReceive (ERRNO 1005): session[10508] is closed
[2021-01-23 14:18:15 *5333.36] 通知结束 (ERRNO 1005): session#12755 不存在
[2021-01-23 14:18:15 *5333.36] 通知结束 (ERRNO 1005): 会话[12755] 已关闭

在示例中,我发送了总共 500k 个请求和 1k 个并发请求,它会记录此错误并挂起! 然后突然挂了!
我的服务器是 Centos 7,8GB 内存和 4 核 cpu
Swoole 有 40 个工人,+ 30 个 Master-Worker 和 8 个 Reactor。
即使在生产中也会发生这种情况。
有人可以帮助我或解释为什么会发生这种情况,也许我该如何解决
谢谢。

解决方法

好的,我找到了问题所在。实际上,这不是 Swoole 或我的应用程序中的错误。这是一个通知日志,可以通过 Swoole 服务器配置的 log_level 属性禁用。 当客户端关闭 swoole 选项卡或浏览器(关闭客户端连接)时会发生这种情况,因此它会断开连接,因此 Swoole 无法检索用户会话并记录此通知。 此外,如果您使用 Apache ab 或 WRK 等基准测试工具,如果出现问题,这些测试人员将终止所有其他请求并停止整个测试。所以会话被关闭并再次写入日志。