nginx:性能優化

優化方法論

   (1)從軟件層面提升硬件使用效率

        ①增大CPU的利用率

         ②增大內存的利用率

         ③增大磁盤IO的利用率

         ④增大網絡帶寬的利用率

   (2)提升硬件規格

        ①網卡:萬兆網卡,例如10G,25G,40G等

        ②磁盤:固態硬盤,關注IOPS和BPS指標

        ③CPU:更快的主頻,更多的核心,更大的緩存,更優的架構

        ④內存:更快的訪問速度

     (3)超出硬件性能上限後使用DNS

 

如何增大nginx使用CPU的有效時長?

(1)能夠使用全部CPU資源

        ①master-worker多進程架構

       ②worker進程數量應當大於等於CPU核數(master進程只是負責管理,worker進程爲實際工作進程)

(2)Nginx進程間不做無用功浪費CPU資源

      ①worker進程不應在繁忙時,主動讓出CPU(多個worker進程間不應由於爭搶造成資源耗散。worker進程應當等於CPU核數)

     ②worker進程不應調用一些API導致主動讓出CPU,拒絕類似的第三方模塊

(3)不被其他進程爭搶資源

       ①提升優先級佔用CPU更長時間

      ②減少操作系統上耗資源的非Nginx進程

1.worker_processes 指令

   語法:worker_processes   number | auto(選用auto時,自動選擇跟CPU核數相同)

   默認:worker_processes  1;

   放置位置:main

 

爲何一個CPU就可以同時運行多個進程?

   在宏觀上並行,微觀上串行

   把進程的運行時間分爲一段段的時間片,OS調度系統依次選擇每個進程,最多執行時間片指定的時長

 

阻塞API引發的時間片內主動讓出CPU

        (1)速度不一致引發的阻塞API(硬件執行速度不一致,例如CPU和磁盤

        (2)業務場景產生的阻塞API(例如同步讀網絡報文)

 

減少進程間的切換(是指CPU從一個進程或線程切換到另一個進程或線程。花費5us)

  (1)使nginx  worker進程儘可能處於運行狀態

  (2)儘可能減少進程間切換(Linux命令:  vstat,dstat, pidstat -w -p  進程號  1)

  (3)綁定CPU

什麼決定CPU時間片的大小?

   (1)Nice靜態優先級:-20 —— 19   (越小優先級越高,一般把nginx調到-20)

 1.worker_priority指令(設置worker進程的靜態優先級)

   語法:worker_priority   number;

   默認:worker_priority      0;

   放置位置:main

(2)Priority動態優先級:0——139

 

提升CPU緩存命中率:worker_cpu_affinity

1.worker_cpu_affinity指令(綁定worker到指定CPU

  語法:worker_cpu_affinity cpumask.......;      worker_cpu_affinity  auto(自動一個worker綁定一顆CPU)

  默認:空

  放置位置:main

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章