提高服務器併發能力的理論

 如何提高服務器併發能力,理論依據、方法是什麼

  吶,一臺服務器,到底能處理多少併發?1萬,10萬,一百一千萬?由什麼決定呢?

  不用說,最終肯定是由硬件決定!更強的cpu、更大的內存、更高的帶寬、更高速的io設備……來一臺IBM大型機,再菜的鳥也能整到百萬併發

  轉載請註明原著:博客園老鍾 https://www.cnblogs.com/littlecarry/

  討論硬件沒有多大意義

  我們要討論的事,普通固定硬件條件下,如何提升服務器的併發能力

  併發,也就是單位時間裏服務器處理的最大請求數,通常定義爲1秒時間內。

 

  針對外部訪問,服務器的行爲概括爲:連接請求、處理請求

  1、連接請求

   基於NIO多路複用技術

      NIO多路複用技術,可以讓上億的請求,同時連在一臺服務器管理

  2、處理請求

   儘量縮短每一個請求的執行時間

     一個請求執行的時間越短,單位時間內能處理的請求就越多。一個請求的執行,可能涉及網絡IO、硬盤IO、內存的讀寫,縮短或屏蔽這些讀寫,將大大提升執行速度。

 

   要提升服務器併發能力,就是要提升“連接請求”、“處理請求”的處理能力, 核心是找出他們的性能瓶頸、改善性能瓶頸

        性能瓶頸包括:

  1、操作系統的IO讀寫能力瓶頸

    涉及:網絡IO、硬盤IO、內存等

    提升方法:零拷貝、DMA、緩存等

  2、系統資源瓶頸

    涉及:線程數量、鎖競爭、內存申請釋放、系統參數配置等

    提升方法:1)線程越多,操作系統切換線程上下文消耗越大,線程少,IO的阻塞可能導致系統空轉。通過實際調試分配合適的線程數量

            2)鎖的種類很多,悲觀、樂觀,重入等等,選擇合適的鎖,能提升資源的競爭率。所有的鎖都是悲觀鎖,是不可取的。

         3)內存合理的申請、釋放,能節約資源的消耗

            4)系統參數、jvm參數,很多根據實際情況分配

  3、代碼能力瓶頸

    涉及:代碼架構、代碼邏輯、代碼對內存的操作等

    小結:

  性能瓶頸改善,主要針對處理請求的能力的提升連接請求的能力也同步提升。

  很多網上說nginx的併發量是2萬、5萬、6萬……,都是不對的,一是nginx的代碼架構,並沒有對併發量的約束,二是脫離了硬件。nginx的架構沒有約束連接請求,“處理請求”,就看你對性能瓶頸的改善,以及你的硬件了,這兩點提升了,併發佰億可能不是問題

  當然,這裏還有一個“單機性能”的問題,不用切換線程的操作系統,執行當然最快。所以需要處理百萬級別的併發,分佈式處理效率纔是最高的

  本文只是提供基本的理論思路,很多具體的方法不細說,得自行查詢

  

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