从 Debian 9.7 升级到 9.8 后 Puma 挂起

从 Debian 9.7 升级到 9.8 后 Puma 挂起

我有一个前端,使用 Nginx 通过 Unix 套接字在两个单独的容器中与 Puma 通信。Puma 容器的基础镜像是ruby:2.5-slim。两天前我清除了 Docker 缓存并尝试部署新构建的前端后,Puma 停止响应请求。我已将直接原因追溯到ruby:2.5-slim基础镜像中使用的 Debian 版本从 Debian 9.7 更改为 9.8。一种想法是,两个版本之间的相关安全设置发生了变化。

我已确定重建与 Debian 9.7 类似的映像ruby:2.5-slim(但从 Debian 9.7 开始)可以解决眼前的问题。但我想解决更深层次的问题,这样我就不必固定 Debian 的版本。

当 Puma 配置为以单一模式(0 个工作线程)运行时,它会处理请求。当 Puma 配置为以集群模式(如之前一样,有 1 个或多个工作线程)运行时,它会挂起。

下一步该怎么做才能帮助解决此问题?也许这只是一个我应该向 Puma 提交的错误?

先前的故障排除详细信息留作参考:

我已尝试将套接字从 移到/tmp/frontend.sock/run/frontend.sock避免潜在的私有 tmp 可见性限制。

此后,我尝试将套接字移至 TCP 套接字,并看到了类似的行为。在这两种情况下,我还看到套接字在 Debian/Puma 容器内挂起:

# curl --unix /tmp/frontend.sock http://localhost/health # Unix domain socket
# curl localhost:3001/health # TCP socket

当从图片中删除 Nginx 容器时,curl 命令将按localhost:3000/health预期工作(但在此实例中我正在运行bundle exec rails s -b 0.0.0.0 -p 3000,它会忽略 Puma 配置)。

“挂起”并不是确切的描述。当 pod 首次启动时,我有时能够在一段时间后从浏览器获得初始页面加载长的等待,这或许表明存在竞争,随后锁定了 Puma 线程。后续尝试只是超时。CPU 大部分时间处于空闲状态。

Kubernetes pod 配置如下:https://gist.github.com/emwalker/0ffb1df6ef82d2566aebc45cd5660ce7

相关内容