在日常的运维工作中,经常会用到nginx来搭建Web服务,也时常会因高并发导致性能瓶颈的问题。在Nginx性能的优化方面,大多数同学接触到的优化建议就是修改workerprocesses和workerconnections,今天我和大家一起来探究当中的原因
案例场景:
在云上使用Nginx搭建的企业官网,服务器配置为 8Core 16G, 网站访问速度很慢,有时会报504错误(超时连接),通过监控查看服务器负载状况,各方面使用率很低。
调整worker_processes
Nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,并维护工作进程。工作进程会对请求进行实际处理。Nginx采用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。
换句话说,worker_processes表示虚拟服务器为每个处理器分配了多少内核,以便Nginx可以以优化的方式管理并发送请求。
查看使用的CPU的核数
grep processor /proc/cpuinfo | wc –l
一般系统默认的CPU核数为1,如果我们不做修改,则会使得资源造成浪费。如果使用的CPU核数是8,系统默认只会使用1个内核。我们需要在配置文件nginx.conf中进行修改
worker_processes 8;
最大化worker_connections
worker_connections表示worker进程能处理并发(发起)的最大连接数(包含所有连接数)。系统默认最大的并发数为1024,我们也可以修改这个值,以发挥Nginx的最大性能。
假设每个工作进程有1个内核,将worker_connections设置为1024意味着Nginx可以服务1024个客户端/秒。
如果你的网站访问量很大,已经远远超过默认值1024这个并发数,这时你将需要修改worker_connecions这个值 ,数值值越大,并发数也就大,连接数最大值是65535。
建议连接数大小配置:
在配置文件nginx.conf中进行修改
系统的最大打开文件数>= worker_connections*worker_process
需要根据系统的最大打开文件数来调整,worker_connections进程连接数量要小于等于系统的最大打开文件数。
worker_connections进程连接数量真实数量= worker_connections*worker_process。