这是一位读者带回来的面试问题。nginx是如何实现并发的?为什么 nginx使用多线程吗?nginx常用的优化方法有哪些?502错误的可能原因是什么?
面试官 s心理分析主要看考生是否熟悉nginx的基本原理,因为大部分人或多或少都知道nginx,但真正理解原理的人很少。只有了解了它的原理,才能做优化,否则只能照常移动样本,出了问题就无从下手。
对皮草知之甚少的人,一般会做web服务器,建网站。主要操作和维护可以具有https并配置反向代理;中级运维定义一个上游,写一个常规判断;老鸟可以优化自己的个性,写一个acl,还可能修改源代码(边肖说他没有能力修改源代码)。
面试问题分析nginx如何实现高并发。异步,非阻塞,使用epoll和大量底层代码优化。
如果一个服务器采用一个进程负责一个请求的,那么进程的数量就是并发的数量。一般情况下,会有很多流程在等待。
nginx采用一个主进程和多个工作进程的模式。
主进程主要负责收集和分发请求。每当有请求时,主服务器就会启动一个工作进程来处理该请求。同时,主进程还负责监控woker的状态,确保可靠性高的woker进程一般设置为与cpu核数一致。nginx s woker进程可以同时处理的数量只受内存的限制,而且它可以处理多个请求。nginx 的异步非阻塞工作模式就是利用等待时间。当它们需要等待时,这些进程处于空闲和袖手旁观状态,因此这表明少数进程解决了许多并发问题。每次收到请求时,都会有一个工作进程来处理它。但不是整个过程,到什么程度?处理到可能发生拥塞的地方,比如把请求转发到上游(后端)服务器,等待请求返回。然后,这个工人很聪明。发送请求后,他将注册一个事件: 如果upstream返回,让我知道,我会继续做。所以他去休息了。
此时,如果另一个请求进来,他很快就可以再次以这种处理它。一旦上游服务器返回,这个事件就会被触发,worker就会接管,这个请求就会继续下去。
为什么 nginx使用多线程吗?apach:创造了多个。一个进程或者线程,每个进程或者线程都会给它分配cpu和内存(线程比进程小很多,所以work:使用单线程异步非阻塞处理请求(管理员可以配置nginx主进程的工作进程数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,减少了大量cpu上下文切换。那个 这就是nginx支持更高并发性的原因。
nginx有哪些常见的优化配置?1)调整worker_processes是指nginx要生成的worker的数量。最佳实践是每个cpu运行一个工作进程。
了解系统中cpu核心的数量,并输入
$ grep processor/proc/cpu info | wc-l2)最大化worker_connectionsnginx web服务器可以同时提供服务的客户端数量。当与worker_proc:(在http部分)。
4)启用静态文件缓存启用静态文件缓存以减少带宽并提高性能。您可以添加以下命令来限制计算机缓存网页的静态文件:
位置~*。(jpg | jpeg | png | gif | ico | css | js)$ { expires 365d;} 5)time out keepalive连接减少了打开和关闭连接所需的cpu和网络开销。有关需要调整以获得最佳性能的变量,请参考:
6)禁用access_logs访问日志记录,记录每一个nginx请求,从而消耗大量cpu资源,从而降低nginx性能。
完全禁用访问日志记录。
access _ log off如果必须进行访问日志记录,请启用访问日志缓冲。
access _ log/var/log/nginx/access . log main buffer = 16k 502错误的可能原因有哪些?1)fastcgi进程是否已经启动,2)fastcgi工作进程的数量是否不够,3)fastcgi执行时间太长,4)fastcgi缓冲区不够。nginx和apache一样,有前端缓冲限制,可以调整缓冲参数。
fastcgi _ buffer _ size 32kfastcgi _ buffers 8 32k5)代理缓冲不够。如果使用代理,请调整它。
proxy _ buffer _ size 16kproxy _ buffers 4 16k6)php脚本执行时间太长。更改值name = 请求终止超时 0s/php-fpm . conf的值设置为时间。
近期热门文章推荐:
1.1000个java面试问题及其答案(最新版,2022)
2.厉害!java协议来了。。。
3.spring boot 2.x教程,太完整了!
4.停止写全屏爆款,试试装饰器模式,这才是优雅的!!
5 . 《java开发手册(嵩山版)》 ;的最新发布,赶紧下载吧!
感觉良好,唐 别忘了喜欢它,转发它!
标签:
多重过程
了解更多nginx如何实现高并发(为什么nginx是多进程)相关内容请关注本站点。
