这是一位读者带回来的面试问题。Nginx是如何实现并发的?Nginx为什么不用多线程?Nginx常用的优化方法有哪些?出现错误的可能原因是什么?面试官的心理分析主要看申请人是否熟悉NGI
Nginx是如何实现并发的?Nginx为什么不用多线程?Nginx常用的优化方法有哪些?出现错误的可能原因是什么?
面试官的心理分析主要看申请人是否熟悉NGINX的基本原理,因为大部分人或多或少对NGINX有所了解,但真正了解原理的人很少。只有了解了它的原理,才能优化它,否则只能同样的移动样品,出了问题就无从下手。
懂皮毛的人一般会做Web服务器,建网站;主运维可以设置HTTPS,配置反向代理;中级运维定义一个上游,写一个常规判断;老鸟可以优化自己的个性,写一个ACL,还可能修改源代码(边肖表示没有能力修改源代码)。
面试问题分析Nginx如何实现高并发?异步,非阻塞,使用epoll和大量底层代码优化。
如果一个服务器采用一个进程负责一个请求的方式,那么进程的数量就是并发的数量。一般情况下,会有很多进程一直在等待。
Nginx采用一个主进程和多个工作进程的模式。
master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。同时master进程也负责监控woker的状态,保证高可靠性woker进程一般设置为跟cpu核心数一致。nginx的woker进程在同一时间可以处理的请求数只受内存限制,可以处理多个请求。Nginx 的异步非阻塞工作方式正把当中的等待时间利用起来了。在需要等待的时候,这些进程就空闲出来待命了,因此表现为少数几个进程就解决了大量的并发问题。
每个传入的请求都将由一个工作进程来处理。但这不是全部过程。到什么程度?处理可能发生拥塞的地方,比如将请求转发到上游(后端)服务器,等待请求返回。然后,处理这个的工人很聪明。发送请求后,他会注册一个事件:“如果上游返回,让我知道,我会再做一次”。所以他去休息了。
此时,如果另一个请求进来,他很快就可以再次以这种方式处理它。一旦上游服务器返回,这个事件将被触发,worker将接管,请求将被拒绝。
Nginx为什么不用多线程?Apache:创建多个进程或线程,每个进程或线程会给它分配cpu和内存(线程比进程小很多,所以worker比perfork支持更高的并发),发送一个会议消耗服务器资源。
NGX:单线程异步无阻塞处理请求(管理员可以配置Nginx主进程的工作进程数)(epoll)。不会为每个请求分配cpu和内存资源,节省了大量资源,减少了大量CPU的上下文切换。这也是Nginx支持更高并发的原因。
Nginx有哪些常见的优化配置?1)调整工作进程
指Nginx要生成的工人数量。最佳实践是每个CPU运行一个工作进程。
了解系统中CPU核心的数量,并输入
$ grep processor / proc / cpuinfo | wc -l
2)最大化工人联系Nginx Web服务器可以同时提供服务的客户端数量。当与worker_processes结合使用时,可以获得每秒可以服务的最大客户端数量。
每秒最大客户端数=工作进程*工作连接数
为了最大限度地发挥Nginx的全部潜力,worker连接应该设置为内核一次可以运行的最大允许进程数1024。Nginx常见配置汇总!从入职到工作就够了。
3)启用Gzip压缩压缩文件大小减少了客户端http的传输带宽,从而提高了页面加载速度。
建议的gzip配置示例如下:(在http部分)
4)为静态文件启用缓存
要启用静态文件缓存以减少带宽并提高性能,您可以添加以下命令来限制计算机缓存网页的静态文件:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {expires 365d;}
5)超时Keepalive连接减少了打开和关闭连接所需的CPU和网络开销。有关需要调整以获得最佳性能的变量,请参考:
6)禁用访问日志
访问日志,记录每一个nginx请求,从而消耗大量CPU资源,从而降低nginx性能。
完全禁用访问日志记录。
access_log off;
如果需要访问日志记录,请启用访问日志缓冲。
access_log /var/log/nginx/access.log主缓冲区= 16k
52报告错误的可能原因是什么?fastcgi进程是否已经启动;2)2)FastCGI工作进程的数量是否不足;fastcgi的执行时间过长;4)4)FastCGI缓冲区不足;nginx和apache一样,有前端缓冲限制,缓冲参数可以调整。
fastcgi_buffer_size 32k;fastcgi_buffers 8 32k;5)Proxy Buffer不够
如果使用代理,请调整
proxy_buffer_size 16k;proxy_buffers 4 16k;6)php脚本执行时间过长
设置