Nginx如何实现高并发性?常见的优化方法有哪些?

发布者:上海IT外包来源:http://www.lanmon.net点击数:1804

Nginx如何实现并发?为什么Nginx不使用多线程? Nginx有哪些常见的优化方法? 502错误的可能原因是什么?
采访者精神分析
主要原因是看申请人是否熟悉NGINX的基本原则,因为大多数运营商或多或少都了解NGINX,但实际原则很少。理解原理,为了优化,否则你只能移动样本,而没有办法解决问题。
一个知道毛皮的人,通常会是一个Web服务器,建立一个网站;主要操作和维护可以参与HTTPS,配置反向代理;中间操作和维护定义上游,写出定期判断;老鸟做一个性能优化,写一个ACL,就可以改变源代码(小编表示没有能力改变源代码)。
面试问题分析
1. Nginx如何实现高并发性?
异步,非阻塞,使用epoll和许多底层代码优化。
如果服务器使用负责请求的进程,则进程数是并发数。在正常情况下,会有很多进程永远等待。
并且nginx使用主进程,多个woker进程模式。
主进程主要负责收集和分发请求。每当有请求进入时,主服务器就会启动一个工作进程来处理请求。
同时,主过程还负责监控工人的状态,确保高可靠性。
woker进程通常设置为匹配cpu核心的数量。 nginx woker进程可以同时处理的请求数受内存限制,可以处理多个请求。
Nginx的异步非阻塞操作模式正在利用延迟。当您需要等待时,这些进程处于空闲状态并处于待机状态,因此有一些进程可以解决大量并发问题。
面试问题:Nginx如何实现高并发?常见的优化方法有哪些?
每次请求进入时,都会有一个工作进程来处理它。但不是整个过程,到什么程度?处理可能发生阻塞的位置,例如将请求转发到上游(后端)服务器,并等待请求返回。然后,这个过程的工作人员非常聪明,他将在发送请求后注册一个事件:“如果上游返回,请告诉我,我会继续。”所以他休息了一下。此时,如果有另一个请求,他可以通过这种方式快速处理。一旦上游服务器返回,将触发此事件,工作人员将接管,请求将关闭。2.为什么Nginx不使用多线程?
Apache:创建多个进程或线程,每个进程或线程为它分配cpu和内存(线程比进程小得多,因此worker支持比perfork更高的并发性)并发送服务器资源的开销。
Nginx:使用单线程异步非阻塞处理请求(管理员可以配置Nginx主进程数)(epoll),不为每个请求分配cpu和内存资源,节省大量资源,还减少了大量数据CPU上下文切换。因此它使Nginx支持更高的并发性。
3. Nginx有哪些常见的优化配置?
面试问题:Nginx如何实现高并发?常见的优化方法有哪些?
(1)调整worker_processes
指的是Nginx将产生的工人数量。最佳实践是每个CPU运行1个工作进程。
了解系统中CPU核心的数量,输入
$ grep processor/proc/cpuinfo | wc -l
(2)最大化worker_connections
Nginx Web服务器可以同时提供的客户端数量。获取与worker_processes一起使用时每秒可以服务的最大客户端数
最大客户端数/秒=工作进程*工作者连接数
为了最大限度地发挥Nginx的全部潜力,工作者连接应该设置为最多1024个允许的进程,核心可以一次运行。
(3)启用Gzip压缩
压缩文件大小,降低了客户端http的传输带宽,从而提高了页面加载速度
推荐的gzip配置示例如下:(在http部分中)
面试问题:Nginx如何实现高并发?常见的优化方法有哪些?
(4)启用静态文件的缓存
要为静态文件启用缓存以减少带宽并提高性能,可以添加以下命令来限制计算机为网页缓存的静态文件:
位置〜*。(jpg | jpeg | png | gif | ico | css | js)$ {
过期365d;
}
(5)超时
keepalive连接减少了打开和关闭连接所需的CPU和网络开销。为获得最佳性能,您需要调整变量:
面试问题:Nginx如何实现高并发?常见的优化方法有哪些?
(6)禁用access_logs
访问日志记录,记录每个nginx请求,从而消耗大量CPU资源,从而降低nginx性能。完全禁用访问日志记录
Access_log关闭;
如果必须具有访问日志记录,请启用访问日志缓冲
Access_log /var/log/nginx/access.log主缓冲区=16k
4. 502错误报告的可能原因是什么?
(1)FastCGI过程是否已经开始
(2)FastCGI工作进程数量不足吗?
(3)FastCGI执行时间太长
(4)FastCGI Buffer不够用
Nginx和apache,有一个前端缓冲区限制,可以调整缓冲区参数
Fastcgi_buffer_size 32k;
Fastcgi_buffers 8 32k;
(5)代理缓冲区是不够的
如果您使用了代理,请调整
Proxy_buffer_size 16k;
Proxy_buffers 4 16k;
(6)php脚本执行时间过长
把php-fpm.conf
0
0s改为一次
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部