我一直在处理 AWS Elastic Beanstalk 环境中一个可以说是奇怪的问题。当给定时间内单个实例上有超过 300 个连接时,我收到以下 nginx 错误:
2018/03/23 20:56:53 [错误] 5431#0: *4121 connect() 至 unix:///var/run/puma/my_app.sock 失败(11:资源暂时不可用) 连接到上游时,客户端:
答案1
仔细研究问题和配置,故障与超出资源限制有关。可能是以下两个操作系统资源:
- 打开文件描述符
- 单个用户可用的进程。为了消除进程限制,请将 EC2 实例中的 nproc 值保持在非常高的值或无限制。
sudo vi /etc/security/limits.conf
参考此链接简要介绍一下。由于 worker_rlimit_nofile 不能超过服务器上设置的 ulimit,因此第一种方法是计算 nginx 参数并根据要求进行调整:
我们可以提供服务
worker_processes * worker_connections / ( keepalive_timout * 2 ) users per second
。
本扩展指南可以帮助您量化应增加和定义的值。定义完 Web 服务器的值后,您需要使用更高或相等的值来更新限制。检查服务器可支持的用户并发量,以帮助您进行扩展。