Apache之三種工作模式和配置性能優化

1?Apache的3種模式和版本

?Apache目前一共有三種穩定的MPM(Multi-Processing Module,多進程處理模塊)模式,它們分別是preforkworkerevent
我們可以使用httpd -V 命令查看apache的版本和模式,如果你服務端允許了apache,你先用httpd -V試下,如果提示如下

-bash: httpd: command not found

那就先找到運行的httpd進程,ps -ef | grep httpd,然后直接用這個進程的全路徑進行-V操作

/**/**/apache_portal/bin/httpd -V
AH00318: WARNING: MaxRequestWorkers of 20000 would require 100 servers andwould exceed ServerLimit of 60, decreasing to 12000.To increase, please see the ServerLimit directive.
Server version: Server/2.4.18 (Unix)
Server built:   Jul 21 2017 08:43:23
Server's Module Magic Number: 20120211:52
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     worker

這里我們可以知道apache的模式是worker模式,然后版本是2.4.18

1)prefork模式

Prefork MPM優點:先預派生一些子進程,然后等待連接;可以減少頻繁創建和銷毀進程的開銷,每個子進程只有一個線程,在一個時間點內,只能處理一個請求不需要擔心線程安全問題

缺點:一個進程相對占用資源,消耗大量內存,不擅長處理高并發

?

2)worker模式

worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創建一些線程,同時包括一個監聽線程,每個請求過來會被分配到一個線程來服務。線程比起進程會更輕量,因為線程是通過共享父進程的內存空間,因此,內存的占用會減少一些,在高并發的場景下會比prefork有更多可用的線程,表現會更優秀一些;另外,如果一個線程出現了問題也會導致同一進程下的線程出現問題,如果是多個線程出現問題,也只是影響Apache的一部分,而不是全部。由于用到多進程多線程,需要考慮到線程的安全,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)

?

3)event模式

它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢后,又允許它釋放。這增強了在高并發場景下的請求處理。

?

4)我們看下httpd平均占用內存的大小

ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'
11792.7

差不多11M

?

?

?

?

?

2??Apache的配置和性能優化

Apache的配置文件httpd.conf的配置方式如下,不同的模式標簽不一樣,但是里面的參數類似

prefork模式部分配置如下

<IfModule mpm_prefork_module>StartServers             5MinSpareServers          5MaxSpareServers         10MaxRequestWorkers      250MaxConnectionsPerChild   1000
</IfModule>

worker模式部分配置如下

<IfModule mpm_worker_module>StartServers             3ServerLimit             16MinSpareThreads         75MaxSpareThreads        250ThreadsPerChild         25MaxRequestWorkers      400MaxConnectionsPerChild   1000
</IfModule>

event模式部分配置如下

<IfModule mpm_event_module>StartServers             3ServerLimit             16MinSpareThreads         75MaxSpareThreads        250ThreadsPerChild         25MaxRequestWorkers      400MaxConnectionsPerChild   1000
</IfModule>

1)StartServers

服務器啟動時建立的子進程數量

?

?

2)ServerLimit

系統配置的最大進程數量

?

3)MinSpareServers

空閑子進程的最小數量,比如默認5;如果當前空閑子進程數少于MinSpareServers ,那么Apache將以最大每秒一個的速度產生新的子進程,此參數不要設的太大.

?

4)MaxSpareServers

空閑子進程的最大數量,默認10;如果當前有超過MaxSpareServers數量的空閑子進程,那么父進程會殺死多余的子進程。這參數也不需要設置太大,如果你將其設置比MinSpareServers 小,Apache會自動將其修改為MinSpareServers +1的數量。

?

5)MinSpareThreads

空閑線程數最小數,這里默認是75

?

6)MaxSpareThreads

空閑線程數最大數,這里默認是250

?

7)?ThreadsPerChild

每個子進程固定產生的線程數量。

?

8)MaxRequestWorkers/MaxClients

限定服務器同一時間內客戶端最大接入的請求數量MaxRequestWorkers/MaxClients設置了所有子進程中的線程總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程。

Apache2.3.1版本之前這參數MaxRequestWorkers被稱為MaxClients,

?

9)MaxConnectionsPerChild/MaxRequestsPerChild

每個子進程在其生命周期內允許最大的請求數量,如果請求總數已經達到這個數值,子進程將會結束,如果設置為0,子進程將永遠不會結束。

MaxConnectionsPerChild在Apache2.3.9之前稱之為MaxRequestsPerChild,我們可以看如下解釋

?

?

?

worker的工作原理是,由主控制進程生成“StartServers”個子進程,每個子進程中包含固定的ThreadsPerChild線程數,各個線程獨立地處理請求。同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設置了最少和最多的空閑線程數;而MaxClients設置了所有子進程中的線程總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程。

MinSpareThreads和MaxSpareThreads的最大缺省值分別是75和250。這兩個參數對Apache的性能影響并不大,可以按照實際情況相應調節

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286789.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

lsof命令

lsof, LiSt Opened Files, 列出打開的文件, 聽起來很簡單的樣子. 但想*nix中很多其他工具一樣, lsof把這件簡單的事情做到了爐火純青. 因為Unix認為”一切皆文件”, 那么”打開的文件”就不僅僅是傳統意義上打開的文件了, 還可以是網絡/Unix域套接字, 匿名/具名管道, 共享庫文件…

React-引領未來的用戶界面開發框架-讀書筆記(二)

第4章 數據流 由于react的數據流向是單向的&#xff08;其父節點傳遞到子節點&#xff09;&#xff0c; 因此組件是簡單且易于把握的&#xff08;它們只需要從父節點獲取props渲染即可&#xff09; 假如頂層組件的某個prop改變了&#xff0c;react會遞歸地向下遍歷整個組件樹&a…

六、WebApp 二手信息站點頁面制作(IVX 快速開發教程)

六、二手信息站點頁面制作 在了解了基礎可視組件后&#xff0c;我們可以通過這些可視組件進行站點頁面開發&#xff0c;在此以一個二手交易網站站點頁面為例&#xff0c;本教程示例并不是成熟完善的示例&#xff0c;需要各位讀者進行少量完善&#xff0c;示例只是用于功能講解…

【專升本計算機】甘肅省專升本考試公共課計算機填空題考點匯總

甘肅專升本考試公共課計算機填空題考點匯總 Excel 工作簿文件的默認擴展名為 xls 。 Excel 主界面窗口中編輯欄上的 “fx” 按鈕用來向單元格插入函數。 用來給電子工作表中的行號進行編號的是數字。 在 Excel 中,輸入數字作為文本使用時,需要輸入作為先導標記的字符是單引…

Blazor University (25)路由 —— 通過 HTML 導航

原文鏈接&#xff1a;https://blazor-university.com/routing/navigating-our-app-via-html/通過 HTML 導航源代碼[1]鏈接到 Blazor 組件中的路由的最簡單方法是使用 HTML 超鏈接。<a href"/Counter">This works just fine</a>Blazor 組件中的超鏈接會被…

css3選擇器詳解

css3選擇器詳解css中除了早先最早的&#xff0c;ID選擇器&#xff0c;class選擇器一些以外在css3中新加入了新的選擇器&#xff0c;新選擇器的使用大大的方便了我們的編程&#xff0c;下面我就說一些css3的選擇器的使用方法&#xff0c; p 選擇了所有<p>元素的標簽…

OpenReports中文支持方案

此文章在《OpenReports中文支持完全解決方案.doc》的基礎上做優化&#xff0c;并貼出代碼。已測試通過。 一、主要解決的問題 1 頁面顯示支持中文 2 與服務器或數據庫的交互支持中文 3 查詢結果支持中文 4 導出文件名及內容支持中文 二、解決方案及方法 1 …

LeetCode之First Unique Character in a String

1、題目 Given a string, find the first non-repeating character in it and return its index. If it doesnt exist, return -1. Examples: s "leetcode" return 0.s "loveleetcode", return 2. 2、代碼實現 public class Solution {public int firstU…

七、功能性組件與事件邏輯(IVX 快速開發教程)

七、功能性組件與事件邏輯 由于 iVX 極度易用的特性&#xff0c;在 iVX 中開發微信小程序、WebApp、小游戲應用的開發流程大致相同。介紹完基礎可視化組件后通過后臺的服務、數據庫與事件結合即可完成一個應用的開發&#xff1b;此篇將會介紹 iVX 功能性組件與事件&#xff0c…

python assert的作用

一、python assert的作用&#xff1a; 根據Python 官方文檔解釋(https://docs.python.org/3/reference/simple_stmts.html#assert), "Assert statements are a convenient way to insert debugging assertions into a program". 二、一般的用法是&#xff1a; assert…

React-引領未來的用戶界面開發框架-讀書筆記(三)

第8章 DOM操作 多數情況下&#xff0c;React的虛擬DOM足以用來創建你想要的用戶體驗&#xff0c;而根本不需要直接操作底層真實的DOM。然而也有一些例外。最常見的場景包括&#xff1a;需要與一個沒有使用React的第三方類庫進行整合&#xff0c;或者執行一個React沒有原生支持的…

【專升本計算機】甘肅省普通高等學校專升本考試計算機全真模擬試卷(一)

甘肅省普通高等學校專升本考試計算機全真模擬試卷(一) 一、單項選擇題(在每小題給出的四個選項中只有一項是正確的,將正確選項的字母序號填在括號內。每小題1分,共60分。) 1.在Excel中,當單元格中出現#N/A時,表示( )。 A.公式中有Excel不能識別的文本 B.公式或函數…

WPF 基礎控件之 ToggleButton 樣式

其他基礎控件1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButtonToggleButton 實現下面的效果1&#xff09;ToggleButton來實現動畫&#xff1b;Border嵌套 Ellipse并設置T…

hdu-5781 ATM Mechine(dp+概率期望)

題目鏈接&#xff1a; ATM Mechine Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem DescriptionAlice is going to take all her savings out of the ATM(Automatic Teller Machine). Alice forget how many deposit she has, …

Android之讓手機能識別當前app為瀏覽器類型的APP

1 、問題 我們設置手機默認瀏覽器的時候&#xff0c;我們一般在“設置”頁面&#xff0c;點擊"默認應用管理“&#xff0c;然后再點擊瀏覽器&#xff0c;發現里面沒有當前的app,但是會有一些QQ瀏覽器(前提手機安裝了)或者其它瀏覽器&#xff0c;我們怎么讓系統能識別自己…

反射調用 java bean的set和get方法

v一、使用java.beans.PropertyDescriptor import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method;public class PropertyUtil {private static final String SET_PREFIX "…

八、后臺與數據庫(IVX 快速開發教程)

八、后臺與數據庫 在 iVX 中 數據庫 作為數據存儲倉庫&#xff0c;通過 數據庫 可以永久性存儲存儲數據&#xff0c;而 后臺服務 起到數據傳輸作用&#xff0c;將 數據庫 的數據傳輸到前臺頁面之中&#xff0c;頁面再使用這些數據。 文章目錄八、后臺與數據庫8.1.1 數據庫添加…

React-引領未來的用戶界面開發框架-讀書筆記(四)

第10章 動畫 動畫可以讓用戶體驗變得更加流暢自然&#xff0c;而React的TransitionGroup插件配合CSS3可以讓我們在項目中整合動畫效果的變得易如反掌。 通常情況下&#xff0c;瀏覽器中的動畫都擁有一套極其命令式的API&#xff0c;你需要選擇一個元素并主動移動它或者改變它的…

Android Studio開發環境搭建準備

Android Studio 是一個Android開發環境&#xff0c;基于IntelliJ IDEA. 類似 Eclipse ADT&#xff0c;Android Studio 提供了集成的 Android 開發工具用于開發和調試。 Android Studio開發環境搭建前&#xff0c;我們需要進行安裝前的準備工作&#xff0c;本篇以在Windows 7平臺…