<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                Linux/UnixLinux系統下Apache 并發數的優化apache Apache Http服務器采用prefork或者是worker兩種并發控制模式。安全 preforkMPM服務器 使用多個子進程,每一個子進程只有一個線程。每一個進程在某個肯定的時間只能維持一個鏈接。在大多數平臺 上,PreforkMPM在效率上要比Worker MPM要高,可是內存使用大得多。prefork的無線程設計在某些狀況下將比worker更有優點:它可使用那些沒有處理好線程安全的第三方模塊,并 且對于那些線程調試困難的平臺而言,它也更容易調試一些。并發 workerMPM優化 使用多個子進程,每一個子進程有多個線程。每一個線程在某個肯定的時間只能維持一個鏈接。一般來講,在一個高流量的HTTP服務器上,Worker MPM是個比較好的選擇,由于Worker MPM的內存使用比PreforkMPM要低得多。但worker MPM也由不完善的地方,若是一個線程崩潰,整個進程就會連同其全部線程一塊兒"死掉".因為線程共享內存空間,因此一個程序在運行時必須被系統識別為"每 個線程都是安全的"。spa 通常來講咱們的Apache Http Server都是裝在Unix/Linux下的,并且是采用源碼編譯的方式來安裝的,咱們可以指定在編譯時Apache就采用哪一種模式,為了明確咱們目前 的Apache采用的是哪一種模式在工做,咱們還可使用httpd –l命令即在Apache的bin目錄下執行httpd –l,來確認咱們使用的是哪一種模式。線程 咱們使用Apache配置語言中的” IfModule”來自動選擇模式的配置。設計 在httpd.conf文件中定位到最后一行LoadModule,敲入回車,加入以下內容:調試 繼承 ServerLimit? 20000 StartServers? 5 MinSpareServers? 5 MaxSpareServers? 10 MaxClients? 1000 MaxRequestsPerChild 0 * ServerLimit? ? 20000 默認的MaxClient最大是256個線程,若是想設置更大的值,就的加上ServerLimit這個參數。20000是ServerLimit這個參數的最大值。若是須要更大,則必須編譯apache,此前都是不須要從新編譯Apache。 生效前提:必須放在其余指令的前面 * StartServers? 5 指定服務器啟動時創建的子進程數量,prefork默認為5。 * MinSpareServers? 5 指定空閑子進程的最小數量,默認為5。若是當前空閑子進程數少于MinSpareServers ,那么Apache將以最大每秒一個的速度產生新的子進程。此參數不要設的太大。 * MaxSpareServers? 10 設 置空閑子進程的最大數量,默認為10。若是當前有超過MaxSpareServers數量的空閑子進程,那么父進程將殺死多余的子進程。此參數不要設的太 大。若是你將該指令的值設置為比MinSpareServers小,Apache將會自動將其修改為"MinSpareServers+1"。 * MaxClients? 256 限定同一時間客戶端最大接入請求的數量(單個進程并發線程數),默認為256。任何超過MaxClients限制的請求都將進入等候隊列,一旦一個連接被釋放,隊列中的請求將獲得服務。要增大這個值,你必須同時增大ServerLimit。 * MaxRequestsPerChild10000 每一個子進程在其生存期內容許伺服的最大請求數量,默認為10000.到達MaxRequestsPerChild的限制后,子進程將會結束。若是MaxRequestsPerChild為"0",子進程將永遠不會結束。 將MaxRequestsPerChild設置成非零值有兩個好處: 1.能夠防止(偶然的)內存泄漏無限進行,從而耗盡內存。 2.給進程一個有限壽命,從而有助于當服務器負載減輕的時候減小活動進程的數量。 Prefork.c的工做方式: 一個單獨的控制進程(父進程)負責產生子進程,這些子進程用于監 聽請求并做出應答。Apache老是試圖保持一些備用的(spare)或者是空閑的子進程用于迎接即將到來的請求。這樣客戶端就不須要在獲得服務前等候子 進程的產生。在Unix系統中,父進程一般以root身份運行以便邦定80端口,而Apache產生的子進程一般以一個低特權的用戶運行。User和 Group指令用于設置子進程的低特權用戶。運行子進程的用戶必需要對它所服務的內容有讀取的權限,可是對服務內容以外的其余資源必須擁有盡量少的權 限。 在上述的后再加入一個””以下紅色加粗(大又粗)內容: ServerLimit? 20000 StartServers? 5 MinSpareServers? 5 MaxSpareServers? 10 MaxClients? 1000 MaxRequestsPerChild 0 ServerLimit? 50 ThreadLimit? 200 StartServers? 5 MaxClients? 5000 MinSpareThreads? 25 MaxSpareThreads? 500 ThreadsPerChild? 100 MaxRequestsPerChild 0 上述參數解釋: * ServerLimit16 服務器容許配置的進程數上限。這個指令和ThreadLimit結合使用設置了MaxClients最大容許配置的數值。任何在重啟期間對這個指令的改變都將被忽略,但對MaxClients的修改卻會生效。 * ThreadLimit64 每一個子進程可配置的線程數上限。這個指令設置了每一個子進程可配置的線程數ThreadsPerChild上限。任何在重啟期間對這個指令的改變都將被忽略,但對ThreadsPerChild的修改卻會生效。默認值是"64". * StartServers3 服務器啟動時創建的子進程數,默認值是"3"。 * MinSpareThreads75 最小空閑線程數,默認值是"75"。這個MPM將基于整個服務器監視空閑線程數。若是服務器中總的空閑線程數太少,子進程將產生新的空閑線程。 * MaxSpareThreads250 設 置最大空閑線程數。默認值是"250"。這個MPM將基于整個服務器監視空閑線程數。若是服務器中總的空閑線程數太多,子進程將殺死多余的空閑線程。 MaxSpareThreads的取值范圍是有限制的。Apache將按照以下限制自動修正你設置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和 * MaxClients400 容許同時伺服的 最大接入請求數量(最大線程數量)。任何超過MaxClients限制的請求都將進入等候隊列。默認值是"400",16(ServerLimit)乘以 25(ThreadsPerChild)的結果。所以要增長MaxClients的時候,你必須同時增長ServerLimit的值。 * ThreadsPerChild25 每一個子進程創建的常駐的執行線程數。默認值是25。子進程在啟動時創建這些線程后就再也不創建新的線程了。 * MaxRequestsPerChild? 0 設置每一個子進程在其生存期內容許伺服的最大請求數量。到達MaxRequestsPerChild的限制后,子進程將會結束。若是MaxRequestsPerChild為"0",子進程將永遠不會結束。 將MaxRequestsPerChild設置成非零值有兩個好處: 1.能夠防止(偶然的)內存泄漏無限進行,從而耗盡內存。 2.給進程一個有限壽命,從而有助于當服務器負載減輕的時候減小活動進程的數量。 注意 對于KeepAlive連接,只有第一個請求會被計數。事實上,它改變了每一個子進程限制最大連接數量的行為。 Worker.c的工做方式: 每 個進程能夠擁有的線程數量是固定的。服務器會根據負載狀況增長或減小進程數量。一個單獨的控制進程(父進程)負責子進程的創建。每一個子進程能夠創建 ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求并將其傳遞給服務線程處理和應答。Apache老是試圖維持一個備 用(spare)或是空閑的服務線程池。這樣,客戶端無須等待新線程或新進程的創建便可獲得處理。在Unix中,為了可以綁定80端口,父進程通常都是以 root身份啟動,隨后,Apache以較低權限的用戶創建子進程和線程。User和Group指令用于設置Apache子進程的權限。雖然子進程必須對 其提供的內容擁有讀權限,但應該盡量給予它較少的特權。另外,除非使用了suexec,不然,這些指令設置的權限將被CGI腳本所繼承。 公式: ThreadLimit>= ThreadsPerChild MaxClients? <= ServerLimit \* ThreadsPerChild? 必須是ThreadsPerChild的倍數 MaxSpareThreads>= MinSpareThreads+ThreadsPerChild 硬限制: ServerLimi和ThreadLimit這兩個指令決定了活動子進程數量和每一個子進程中線程數量的硬限制。要想改變這個硬限制必須徹底中止服務器而后再啟動服務器(直接重啟是不行的)。 Apache在編譯ServerLimit時內部有一個硬性的限制,你不能超越這個限制。 preforkMPM最大為"ServerLimit200000" 其它MPM(包括work MPM)最大為"ServerLimit 20000 Apache在編譯ThreadLimit時內部有一個硬性的限制,你不能超越這個限制。 mpm\_winnt是"ThreadLimit 15000" 其它MPM(包括work prefork)為"ThreadLimit 20000 注意 使用ServerLimit和ThreadLimit時要特別小心。若是將ServerLimit和ThreadLimit設置成一個高出實際須要許多的值,將會有過多的共享內存被分配。當設置成超過系統的處理能力,Apache可能沒法啟動,或者系統將變得不穩定。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看