![从 Debian 9.7 升级到 9.8 后 Puma 挂起](https://linux22.com/image/735144/%E4%BB%8E%20Debian%209.7%20%E5%8D%87%E7%BA%A7%E5%88%B0%209.8%20%E5%90%8E%20Puma%20%E6%8C%82%E8%B5%B7.png)
我有一个前端,使用 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