java面試知識匯總--nginx高效原理

目標

理解nginx高效原理

高效原因分析

  1. 多進程單線程模型,充分利用硬件資源,單線程減少上下文切換
  2. 非阻塞式io模型,減少上下文切換,減少阻塞io的資源利用率問題,實現(xiàn)單線程處理大量tcp連接(redis也采用類似架構(gòu))

一. 多進程單線程模型


官網(wǎng)架構(gòu)

。NGINX有一個主進程(master process)(執(zhí)行特權(quán)操作,如讀取配置、綁定端口)和一系列工作進程(worker process)和輔助進程(helper process)。
nginx采用可預(yù)見式的進程模型,根據(jù)硬件資源開啟工作進程

  1. 主進程執(zhí)行特權(quán)操作,如讀取配置和綁定端口,還負責創(chuàng)建子進程(下面的三種類型)。

  2. 緩存加載進程(cache loader process)在啟動時運行,把基于磁盤的緩存(disk-based cache)加載到內(nèi)存中,然后退出。對它的調(diào)度很謹慎,所以其資源需求很低。

  3. 緩存管理進程(cache manager process)周期性運行,并削減磁盤緩存(prunes entries from the disk caches),以使其保持在配置范圍內(nèi)。

  4. 工作進程(worker processes)才是執(zhí)行所有實際任務(wù)的進程:處理網(wǎng)絡(luò)連接、讀取和寫入內(nèi)容到磁盤,與上游服務(wù)器通信等。默認配置: worker_processes auto,一個內(nèi)核一個工作進程

二.非阻塞式io模型


官網(wǎng)

三 更新配置升級方式


image.png

更新NGINX的配置,是一個非常簡單的、輕量級的、可靠的操作。運行nginx –s reload命令即可,該命令會檢查磁盤上的配置,并給主進程發(fā)送一個SIGHUP信號。

當主進程接收到SIGHUP信號后,會做兩件事:

1. 重新加載配置,fork一套新的工作進程。這些新的工作進程會立即開始接受連接和處理流量(traffic)(使用新的配置)。
2. 發(fā)出信號,通知舊的工作進程安靜地退出。這些舊進程不會再接受新的連接了。只要它們處理的HTTP請求結(jié)束了,它們就會干凈地關(guān)閉連接。一旦所有的連接都被關(guān)閉,工作進程也就退出了。

原文鏈接,本文為整理資料:https://www.cnblogs.com/chenjfblog/p/8715580.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容