如何在Docker中设置Puma worker,Rails的线程

我最近在Docker上部署了一个Rails应用程序到Amazon ECS。 我的应用程序使用两个容器 – 一个用于应用程序,Puma作为应用程序服务器,另一个用于nginx,作为应用程序的反向代理。 我正在使用2个工人和5个线程的默认彪马configuration。 我在t2.small上运行这个实例。

我们开始看到应用程序最终会开始超时的问题。 用户不会得到任何回应,或者最终会从负载均衡器中获得504错误的网关错误。 在Rails日志中,我们会看到在没有非常特殊的情况下,请求会突然开始太长(800秒!)。 几分钟后,彪马将开始一个新的工人,它会恢复正常。

我在Puma的文档中读到,你应该设置工作人员等于CPU核心的数量,在t2.small上是1,所以我这样做了。 我也读过,如果你不确定你的应用程序是否是线程安全的,你不应该搞砸了,所以我把线程设置为1。 1名工人,1个线程。

整天都很好 – 迄今为止。

我将如何获得更多的并发性? 该应用程序几乎没有使用内存或CPU – 我应该旋转更多的任务(1任务= 1轨道容器+ 1个Nginx容器)? 如果我在Puma面前有nginx,我甚至需要担心吗?

我已经使用彪马安全和内存膨胀了很多问题。 我已经转向乘客,并看到更好的performance。 我也使用Docker。