SSH 和 -bash: fork: 无法分配内存 Ubuntu , rails , Passenger, redis , sidekiq

SSH and -bash: fork: Cannot allocate memory Ubuntu , rails , Passenger, redis , sidekiq

我正在 运行宁一个 rails 应用程序(开发服务器)与乘客在亚马逊 AWS 与 t2.micro 实例。但是我不断收到 -bash: fork: Cannot allocate memory 错误。

我运行正在其上使用 50 sidekiq 并发的 Redis 服务器。通常站点 运行 没问题,但是当我同时启动 2-3 个 sidekiq 进程时,会做一些批处理。该网站需要时间进行重定向,最终会因

而崩溃
502 Bad Gateway 
nginx/1.10.0

然后我必须每次重新启动 nginx 才能再次获取站点 运行ning。这是我的开发服务器,所以我不想投入更多的财务资源来升级到 t2.small(截至目前,这是我们最后的选择),因为这是开发服务器,将在 15 天内使用两次。有什么办法可以解决这个问题吗?以前我有与生产相同的 120 并发,但后来我改为 50。这有点帮助,但仍然存在内存问题。

这里有一些 htop

的统计数据

这是服务器闲置时的统计数据。但是当我 运行 很少有 sidekiq 任务时,它会因 502 而崩溃。

我检查了几个 post 建议交换内存,但不确定 t2.micro 是否更可取。这对于此服务器设置是否可取。在图片中,您可以看到我不交换内存。可以添加交换内存来解决这个问题吗?或者还有其他更好的选择。

您的服务器内存不足,要修复:

然后重试

我这里redis用了2.5G内存,服务器一共4.5G,用了3G。 1.5G免费。

Redis 不断抛出这个错误。

解决方案:

  1. vm.overcommit_memory=1 添加到文件:/etc/sysctl.conf
  2. sudo sysctl -p /etc/sysctl.conf

参考:redis bgsave failed because fork Cannot allocate memory