Aar*_*ron 6 linux nginx reverse-proxy
我有一个 nginx 服务器(CentOS 5.3,linux),在 8 个 ruby on Rails 应用程序服务器前面用作反向代理负载平衡器。随着这些服务器上的负载增加,我开始想知道 nginx 服务器什么时候会成为瓶颈?CPU 几乎不被使用,但这是可以预料的。记忆力好像还不错。没有IO可言。
那么我唯一的限制是网卡带宽吗?目前,根据一些 cacti 图表,服务器在高负载期间每个 NIC 的速度约为 700Kbps(平均 5 分钟)。我觉得这个比例还是很低的。
或者,限制是否在套接字或操作系统中的其他资源中?
感谢您的任何想法和见解。
编辑:
骑车者:
感谢您的见解。我做了更多的挖掘。我有 1 个工作人员允许 1024 个工作连接。我们假设 95% 的请求都是针对少量数据的。关于 512MB 的系统应该能够处理什么连接方面有什么建议吗?
另外,计算连接数的好方法是什么?这样的事情准确吗?:
netstat -np | grep ESTABLISHED | grep nginx | wc -l
Run Code Online (Sandbox Code Playgroud)
结束编辑
亚伦
目前,根据带宽利用率,您的负载相当低。可能存在很多瓶颈,仅举几例:
网络相关
随着连接数量的增加,您可能会达到worker_connectionsNginx 工作进程的限制。骑自行车者的描述非常好,我只是添加几分钱。实际上,你拥有的工人越多,你击中worker_connections某一特定工人的可能性就越大。原因是 Nginx 主进程无法保证工作进程之间连接的均匀分配——其中一些进程可以比其他进程更快地处理请求,因此最终可能会超出限制。
我的建议是使用尽可能少的工人和大量的worker_connections. 然而,如果你有 IO,你将不得不增加工人的数量(见下文)。使用 nginx 的status模块来观察它使用的套接字数量。
您可能会达到操作系统(Linux 或 FreeBSD)对每个进程打开的文件描述符数量的限制。Nginx 不仅会为传入请求使用描述符,还会为后端的传出连接使用描述符。最初此限制设置为非常低的值(例如 1024)。Nginx 将在其中error.log对此事件进行投诉。
如果您正在使用其 conntrack 模块(Linux),您也iptables将超过表的大小。conntrack小心dmesg或/var/log/messages。根据需要增加此限制。
一些非常好的优化应用程序利用 100% 带宽。我敢打赌,您之前一定会遇到以前的问题。
IO相关
事实上,Nginx 工作线程会阻塞 IO。因此,如果您的站点提供静态内容,您将需要增加 Nginx 工作线程的数量来解决 IO 阻塞问题。在这里很难给出秘诀,因为它们根据文件的数量和大小、负载类型、可用内存等而有很大差异。
如果您通过 Nginx 代理到某些后端的连接,您应该考虑到它会创建临时文件来存储后端的答案,并且在高流量的情况下,这可能会导致文件系统上出现大量负载。观察 Nginx 中的消息error.log并相应地调整proxy_buffers(或fastcgi_buffers)。
如果你有一些后台IO(例如MySQL),它也会影响静态文件服务。观察IO 等待%
| 归档时间: |
|
| 查看次数: |
5492 次 |
| 最近记录: |