加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

面试题:Nginx 是如何实现高并发?常见的优化手段有哪些?

发布时间:2019-06-06 20:41:07 所属栏目:业界 来源:今日头条
导读:口试题: Nginx 是怎样实现并发的?为什么 Nginx 不行使多线程?Nginx常见的优化本领有哪些?502错误也许缘故起因有哪些? 口试官生理说明 首要是看应聘职员的对NGINX的根基道理是否认识,由于大大都运维职员多几几何都懂点NGINX,可是真正其大白道理的也许少之又

口试题:

Nginx 是怎样实现并发的?为什么 Nginx 不行使多线程?Nginx常见的优化本领有哪些?502错误也许缘故起因有哪些?

口试官生理说明

首要是看应聘职员的对NGINX的根基道理是否认识,由于大大都运维职员多几几何都懂点NGINX,可是真正其大白道理的也许少之又少。大白其道理,才气做优化,不然只能照样搬样,出了题目也无从动手。

懂皮毛的人,一样平常会做个 Web Server,搭建一个 Web 站点;低级运维也许搞个 HTTPS 、设置一个反向署理; 中级运维界说个 upstream、写个正则判定;老鸟做本机能优化、写个ACL,尚有也许改改源码(小编暗示没有改源码的手段)。

口试题分解

1. Nginx 是怎样实现高并发的?

异步,非阻塞,行使了epoll 和大量的底层代码优化。

假如一个server回收一个历程认真一个request的方法,那么历程数就是并发数。正常环境下,会有许多历程一向在守候中。

而nginx回收一个master历程,多个woker历程的模式。

  • master历程首要认真网络、分发哀求。每当一个哀求过来时,master就拉起一个worker历程认真处理赏罚这个哀求。
  • 同时master历程也认真监控woker的状态,担保高靠得住性
  • woker历程一样平常配置为跟cpu焦点数同等。nginx的woker历程在统一时刻可以处理赏罚的哀求数只受内存限定,可以处理赏罚多个哀求。

Nginx 的异步非阻塞事变方法正把傍边的守候时刻操作起来了。在必要守候的时辰,这些历程就空闲出来待命了,因此示意为少数几个历程就办理了大量的并发题目。

口试题:Nginx 是怎样实现高并发?常见的优化本领有哪些?

每进来一个request,会有一个worker历程行止理赏罚。但不是全程的处理赏罚,处理赏罚到什么水平呢?处理赏罚到也许产生阻塞的处所,好比向上游(后端)处事器转发request,并守候哀求返回。那么,这个处理赏罚的worker很智慧,他会在发送完哀求后,注册一个变乱:“假如upstream返回了,汇报我一声,我再接着干”。于是他就苏息去了。此时,假如再有request 进来,他就可以很快再按这种方法处理赏罚。而一旦上游处事器返回了,就会触发这个变乱,worker才会来接办,这个request才会接着往下走。

2. 为什么 Nginx 不行使多线程?

Apache: 建设多个历程或线程,而每个历程或线程城市为其分派 cpu 和内存(线程要比历程小的多,以是worker支持比perfork高的并发),并发过大会耗光处事器资源。

Nginx: 回收单线程来异步非阻塞处理赏罚哀求(打点员可以设置Nginx主历程的事变历程的数目)(epoll),不会为每个哀求分派cpu和内存资源,节减了大量资源,同时也镌汰了大量的CPU的上下文切换。以是才使得Nginx支持更高的并发。

3. Nginx常见的优化设置有哪些?

口试题:Nginx 是怎样实现高并发?常见的优化本领有哪些?

(1) 调解worker_processes

指Nginx要天生的worker数目,最佳实践是每个CPU运行1个事变历程。

相识体系中的CPU焦点数,输入

  1. $ grep processor / proc / cpuinfo | wc -l 

(2) 最大化worker_connections

Nginx Web处事器可以同时提供处事的客户端数。与worker_processes团结行使时,得到每秒可以处事的最大客户端数

最大客户端数/秒=事变历程*事变者毗连数

为了最大化Nginx的所有潜力,应将事变者毗连配置为焦点一次可以运行的应承的最大历程数1024。

(3) 启用Gzip压缩

压缩文件巨细,镌汰了客户端http的传输带宽,因此进步了页面加载速率

提议的gzip设置示譬喻下:( 在http部门内)

口试题:Nginx 是怎样实现高并发?常见的优化本领有哪些?

(4) 为静态文件启用缓存

为静态文件启用缓存,以镌汰带宽并进步机能,可以添加下面的呼吁,限制计较机缓存网页的静态文件:

  1. location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {  
  2. expires 365d;  

(5) Timeouts

keepalive毗连镌汰了打开和封锁毗连所需的CPU和收集开销,得到最佳机能必要调解的变量可参考:

口试题:Nginx 是怎样实现高并发?常见的优化本领有哪些?

(6) 禁用access_logs

会见日记记录,它记录每个nginx哀求,因此耗损了大量CPU资源,从而低落了nginx机能。

完全禁用会见日记记录

  1. access_log off; 

假如必需具有会见日记记录,则启用会见日记缓冲

  1. access_log /var/log/nginx/access.log主缓冲区= 16k 

4. 502报错也许缘故起因有哪些?

口试题:Nginx 是怎样实现高并发?常见的优化本领有哪些?

(1) FastCGI历程是否已经启动

(2) FastCGI worker历程数是否不足

(3) FastCGI执行时刻过长

(4) FastCGI Buffer不足

nginx和apache一样,有前端缓冲限定,可以调解缓冲参数

  1. fastcgi_buffer_size 32k;  
  2. fastcgi_buffers 8 32k; 

(5) Proxy Buffer不足

假如你用了Proxying,调解

  1. proxy_buffer_size 16k;  
  2. proxy_buffers 4 16k; 

(6) php剧本执行时刻过长

将php-fpm.conf的

  1. <value name="request_terminate_timeout">0s</value> 

0s改成一个时刻

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读