搜尋
首頁運維Apacheapache修改最大並發連線數
apache修改最大並發連線數Oct 26, 2020 pm 04:38 PM
apache並發連接數

apache修改最大並發連線數

Apache為不同的作業系統提供了多個不同的MPM模組,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。如果條件允許,我們可以根據實際需求將指定的MPM模組編譯進我們自己的Apache中(Apache的源碼是開放的,允許使用者自行編譯)。不過,如果在編譯時我們沒有選擇,Apache將依照以下表格根據不同的作業系統自行選擇對應的MPM模組,這也是Apache針對不同平台建議使用的MPM模組。

(建議教學:apache

不同作業系統上預設的MPM模組

作業系統MPM模組描述

Windowsmpm_winnt不用介紹了吧:)

Unix/Linuxmpm_prefork不用介紹了吧:)

BeOSmpm_beos由Be公司開發的一種多媒體作業系統,官方版已停止更新。

Netwarempm_netware由NOVELL公司推出的一種網路作業系統

OS/2mpmt_os2一種最初由微軟和IBM共同開發的作業系統,現由IBM單獨開發(微軟放棄OS/2 ,轉而開發Windows)

mpm_event模組可以看作是mpm_worker模組的一個變種,不過其具有實驗性質,一般不建議使用。

當然,Apache在其官方網站上也提供了根據不同作業系統已經編譯好對應MPM模組的成品Apache。你可以點擊此處進入Apache官方網站下載。

此外,如果我們想要知道某個Apache內部使用的是何種MPM模組,我們可以以命令列的方式進入Apache安裝目錄\bin,然後鍵入命令httpd -l,即可查看到目前Apache內部使用的何種MPM模組。

使用httpd -l指令查看編譯模組

由於在平常的開發工作中,BeOS、NetWare、OS/2等作業系統並不常見,這裡我們主要針對Windows和Unix/ Linux作業系統上的MPM模組進行解說。在Windows和Unix/Linux作業系統上,MPM模組主要有mpm_winnt、mpm_prefork、mpm_worker三種。

mpm_prefork模組

mpm_prefork模組主要應用於Unix/Linux平台的Apache伺服器,其主要工作方式是:當Apache伺服器啟動後,mpm_prefork模組會預先建立多個子程序(預設為5個),當接收到客戶端的請求後,mpm_prefork模組再將請求轉交給子程序處理,並且每個子程序同時只能用於處理單一請求。如果目前的請求數將超過預先建立的子程序數時,mpm_prefork模組就會建立新的子程序來處理額外的請求。 Apache總是試圖保持一些備用的或是空閒的子程序用來迎接即將到來的請求。這樣客戶端的請求就不需要在接收後等候子程序的產生。

由於在mpm_prefork模組中,每個請求對應一個子進程,因此其佔用的系統資源相對其他兩種模組而言較多。不過mpm_prefork模組的優點在於它的每個子程序都會獨立處理對應的單一請求,這樣,如果其中一個請求出現問題就不會影響到其他請求。同時,mpm_prefork模組可以應用於不具備線程安全的第三方模組(例如PHP的非線程安全版本),並且在不支援線程調試的平台上易於調試。此外,mpm_prefork模組還具有比mpm_worker模組更高的穩定性。

mpm_worker模組

mpm_worker模組也主要應用於Unix/Linux平台的Apache伺服器,它可以看作是mpm_prefork模組的改良版。 mpm_worker模組的運作方式與mpm_prefork模組類似。不過,由於處理相同請求的情況下,基於進程(例如mpm_prefork)比基於執行緒的處理方式所佔用的系統資源要多。因此,與mpm_prefork模組不同的是,mpm_worker模組會讓每個子程序創建固定數量的服務線程和一個監聽線程,並讓每個服務線程來處理客戶端的請求,監聽線程用於監聽接入請求並將其傳遞給服務線程處理和應答。 Apache總是試圖維持一個備用或是空閒的服務執行緒池。這樣,客戶端無須等待新執行緒或新行程的建立即可處理。

與mpm_prefork模組相比,mpm_worker模組可以進一步減少系統資源的開銷。再加上它也使用了多進程,每個進程又有多個線程,因此它與完全基於線程的處理方式相比,增加了一定的穩定性。

mpm_winnt模組

mpm_winnt模組是專門針對Windows作業系統而最佳化設計的MPM模組。它只創建一個單獨的子進程,並在這個子進程中輪流產生多個執行緒來處理請求。

修改MPM模組配置

在對Apache的MPM模組具備一定了解後,我們就可以針對不同的MPM模組來修改Apache的最大並發連接數配置了。

1.啟用MPM模組設定檔

在Apace安裝目錄/conf/extra目錄中有一個名為httpd-mpm.conf的設定檔。此檔案主要用於進行MPM模組的相關配置。不過,在預設情況下,Apache的MPM模組設定檔並沒有啟用。因此,我們需要在httpd.conf檔中啟用該設定文件,如下所示:

# Server-pool management (MPM specific)Include conf/extra/httpd-mpm.conf(去掉該行前面的註解符號"#")

2.修改MPM模組設定檔中的相關設定

#在啟動MPM模組設定檔後,我們可以使用文字編輯器開啟該設定文件,我們可以看到,在該設定檔中有許多設定節點,如下圖所示:

只有Apache使用對應MPM模組時,對應設定才會生效

此時,我們就需要根據目前Apache伺服器所使用的MPM模組,來修改對應節點下的參數配置。首先,我們來看看mpm_winnt模組下的預設配置:

#由於mpm_winnt模組只會建立1個子進程,因此這裡對單一子進程的參數設定就相當於整個Apache的參數設定。 ThreadsPerChild      150#建議設定:小型網站=1000 中型網站=1000~2000 大型網站=2000~3500MaxRequestsPerChild    0#建議設定:小=10000 中或大對應配置

ThreadsPerChild

每個子程序的最大並發執行緒數。

MaxRequestsPerChild

每個子程序允許處理的請求總數。如果累積處理的請求數超過該值,該子進程將會結束(然後根據需要確定是否創建新的子進程),該值設為0表示不限制請求總數(子進程永不結束)。

此參數建議設為非零的值,可以帶來以下兩個好處:

可以防止程式中可能存在的記憶體洩漏無限進行下去,從而耗盡記憶體。

給進程一個有限壽命,從而有助於當伺服器負載減輕的時候減少活動進程的數量。

注意:在以上涉及統計請求數量的參數中,對於KeepAlive的連接,只有第一個請求會被計數。

接著,我們再來看看mpm_perfork模組和mpm_worker模組下的預設設定:

#mpm_perfork模組StartServers          5#建議設定:小=預設中=20~50 大=500~100MinSpare=20~50 大=50~Servers 5#建議設定:與StartServers保持一致MaxSpareServers      10#建議設定:小=20 中=30~80 大=80~120 MaxClients          150#建議設定:小=500 中小設定:小=10000 中或大=10000~500000(此外,還需額外設定ServerLimit參數,此參數最好與MaxClients的值保持一致。)

# StartServers:  数量的服务器进程开始
# MinSpareServers:  最小数量的服务器进程,保存备用
# MaxSpareServers:  最大数量的服务器进程,保存备用
# MaxRequestWorkers:  最大数量的服务器进程允许开始
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

prefork 控製程序在最初建立“StartServers”個子進程後,為了滿足MinSpareServers設定的需要創建一個進程,等待一秒鐘,繼續創建兩個 個,再等待一秒鐘, 繼續創建四個…如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足MinSpareServers設定的值為止。這種模式 可以不必在請求到 來時再產生新的進程,從而減少了系統開銷以增加效能。 MaxSpareServers設定了最大的空閒行程數,如果空閒行程數大於這個 值,Apache 會自動kill掉一些多餘行程。這個值不要設得太大,但如果設的值比MinSpareServers小,Apache會自動把其調整 為 MinSpareServers 1。若站點負載較大,可考慮同時增加MinSpareServers和MaxSpareServers。

MaxRequestsPerChild設定的是每個 子程序可處理的請求數。每個子程序在處理了「MaxRequestsPerChild」個請求後將自 動銷毀。 0意味著無限,即子程序永不銷毀。雖然預設為0可以使每個子進程處理更多的請求,但如果設為非零值也有兩點重要的好處:

1、可防止意外的記憶體洩 漏。 2.伺服器負載下降的時侯會自動減少子進程數。

因此,可根據伺服器的負載來調整這個值。

MaxRequestWorkers指令集同時將服務請求的數量上的限制。任何連線嘗試在MaxRequestWorkerslimit將通常被排隊,最多若干基於上ListenBacklog指令。

在apache2.3.13以前的版本MaxRequestWorkers稱為MaxClients 。

(MaxClients是這些指令中最為重要的一個,設定的是 Apache可以同時處理的請求,是對Apache效能影響最大的參數。其預設值150是遠遠不夠的,如果請求總數已達到這個值(可透過ps -ef|grep http|wc -l來確認),那麼後面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個值越大,可以 處理的請求就越多,但Apache預設的限制不能大於256。)

#mpm_worker模組StartServers          2#建議設定:小=預設中=3~5 大=5~10MaxClients          150#建議設定:小=500 中=5001500小=預設=50~100 大=100~200MaxSpareThreads      75#推薦:小=預設中=80~160 大=200~400 ThreadsPerChild      25#Max設定:小建議設定:小=10000 中或大=10000~50000(此外,如果MaxClients/ThreadsPerChild大於16,還需額外設定ServerLimit參數,ServerLimit必須大於等於MaxClients/ThreadsPerChild 的值。參數作用如下:

StartServers

啟動Apache時所建立的子程序數。

MinSpareServers

處於空閒狀態的最小子程序數。

所謂空閒子程序是指沒有正在處理請求的子程序。如果目前空閒子程序數少於MinSpareServers,那麼Apache將以最大每秒一個的速度產生新的子程序。只有在非常繁忙機器上才需要調整這個參數。此值不宜過大。

MaxSpareServers

處於空閒狀態的最大子行程數。

只有在非常繁忙機器上才需要調整這個參數。此值不宜過大。如果你將該指令的值設定為比MinSpareServers小,Apache將會自動將其修改成MinSpareServers 1。

MaxClients

允許同時連線的最大請求數量。

任何超過MaxClients限制的請求都會進入等待佇列,直到達到ListenBacklog指令限制的最大值為止。

對於非執行緒型的MPM(也就是mpm_prefork),MaxClients表示可以用來處理客戶端請求的最大子程序數量,預設值是256。要增大這個值,你必須同時增大ServerLimit。

對於執行緒型或混合型的MPM(也就是mpm_beos或mpm_worker),MaxClients表示可以用來處理客戶端請求的最大執行緒數。線程型的mpm_beos的預設值是50。對於混合型的MPM預設值是16(ServerLimit)乘以25(ThreadsPerChild)的結果。因此要將MaxClients增加到超過16個進程才能提供的時候,你必須同時增加ServerLimit的值。

MinSpareThreads

處於空閒狀態的最小執行緒數。

不同的MPM對這個指令的處理是不一樣的:

mpm_worker的預設值是75。這個MPM將基於整個伺服器監視空閒線程數。如果伺服器中總的空閒執行緒數太少,子行程將產生新的空閒執行緒。 mpm_netware的預設值是10。既然這個MPM只運行單獨一個子進程,此MPM當然也是基於整個伺服器監視空閒執行緒數。 mpm_beos和mpmt_os2的工作方式與mpm_netware差不多,mpm_beos的預設值是1;mpmt_os2的預設值是5。

MaxSpareThreads

處於空閒狀態的最大執行緒數。

不同的MPM對這個指令的處理是不一樣的:

mpm_worker的預設值是250。這個MPM將基於整個伺服器監視空閒線程數。如果伺服器中總的空閒執行緒數太多,子行程將殺死多餘的空閒執行緒。 mpm_netware的預設值是100。既然這個MPM只運行單獨一個子進程,此MPM當然也是基於整個伺服器監視空閒執行緒數。 mpm_beos和mpmt_os2的工作方式與mpm_netware差不多,mpm_beos的預設值是50;mpmt_os2的預設值是10。

備註:ServerLimit表示Apache允許建立的最大進程數。值得注意的是,Apache在編譯時內部有一個硬限制ServerLimit 20000(對於mpm_prefork模組為ServerLimit 200000)。你不能超越這個限制。

使用這個指令時要特別當心。如果將ServerLimit設定成一個高出實際需要許多的值,將會有過多的共享記憶體被分配。如果將ServerLimit和MaxClients設定成超過系統的處理能力,Apache可能無法啟動,或者係統將變得不穩定。

注意:在配置相關參數時,請先確保伺服器具備足夠的硬體效能(例如:CPU、記憶體等)。如果發現自啟動後,隨著伺服器的運行時間增加,伺服器的記憶體佔用也隨之增加,可能是程式中出現記憶體洩露,請向下調整參數MaxRequestsPerChild的值以降低記憶體外洩帶來的影響,然後儘快找出程式中的問題之所在。

以上是apache修改最大並發連線數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:简书。如有侵權,請聯絡admin@php.cn刪除
apache版本怎么查看?apache版本怎么查看?Jun 14, 2019 pm 02:40 PM

查看​apache版本的步骤:1、进入cmd命令窗口;2、使用cd命令切换到Apache的bin目录下,语法“cd bin目录路径”;3、执行“httpd -v”命令来查询版本信息,在输出结果中即可查看apache版本号。

图文详解apache2.4+php8.0的安装配置方法图文详解apache2.4+php8.0的安装配置方法Dec 06, 2022 pm 04:53 PM

本文给大家介绍如何安装apache2.4,以及如何配置php8.0,文中附有图文详细步骤,下面就带大家一起看看怎么安装配置apache2.4+php8.0吧~

Linux apache怎么限制并发连接和下载速度Linux apache怎么限制并发连接和下载速度May 12, 2023 am 10:49 AM

mod_limitipconn,这个是apache的一个非官方模块,根据同一个来源ip进行并发连接控制,bw_mod,它可以根据来源ip进行带宽限制,它们都是apache的第三方模块。1.下载:wgetwget2.安装#tar-zxvfmod_limitipconn-0.22.tar.gz#cdmod_limitipconn-0.22#vimakefile修改:apxs=“/usr/local/apache2/bin/apxs”#这里是自己apache的apxs路径,加载模块或者#/usr/lo

超细!Ubuntu20.04安装Apache+PHP8环境超细!Ubuntu20.04安装Apache+PHP8环境Mar 21, 2023 pm 03:26 PM

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家分享在Ubuntu20.04 LTS环境下安装Apache的全过程,并且针对其中可能出现的一些坑也会提供解决方案,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

nginx,tomcat,apache的区别是什么nginx,tomcat,apache的区别是什么May 15, 2023 pm 01:40 PM

1.Nginx和tomcat的区别nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等),tomcat更多用来做一个应用容器,让javawebapp泡在里面的东西。严格意义上来讲,Apache和nginx应该叫做HTTPServer,而tomcat是一个ApplicationServer是一个Servlet/JSO应用的容器。客户端通过HTTPServer访问服务器上存储的资源(HTML文件,图片文件等),HTTPServer是中只是把服务器

php站用iis乱码而apache没事怎么解决php站用iis乱码而apache没事怎么解决Mar 23, 2023 pm 02:48 PM

​在使用 PHP 进行网站开发时,你可能会遇到字符编码问题。特别是在使用不同的 Web 服务器时,会发现 IIS 和 Apache 处理字符编码的方法不同。当你使用 IIS 时,可能会发现在使用 UTF-8 编码时出现了乱码现象;而在使用 Apache 时,一切正常,没有出现任何问题。这种情况应该怎么解决呢?

如何在 RHEL 9/8 上设置高可用性 Apache(HTTP)集群如何在 RHEL 9/8 上设置高可用性 Apache(HTTP)集群Jun 09, 2023 pm 06:20 PM

Pacemaker是适用于类Linux操作系统的高可用性集群软件。Pacemaker被称为“集群资源管理器”,它通过在集群节点之间进行资源故障转移来提供集群资源的最大可用性。Pacemaker使用Corosync进行集群组件之间的心跳和内部通信,Corosync还负责集群中的投票选举(Quorum)。先决条件在我们开始之前,请确保你拥有以下内容:两台RHEL9/8服务器RedHat订阅或本地配置的仓库通过SSH访问两台服务器root或sudo权限互联网连接实验室详情:服务器1:node1.exa

Linux下如何查看nginx、apache、mysql和php的编译参数Linux下如何查看nginx、apache、mysql和php的编译参数May 14, 2023 pm 10:22 PM

快速查看服务器软件的编译参数:1、nginx编译参数:your_nginx_dir/sbin/nginx-v2、apache编译参数:catyour_apache_dir/build/config.nice3、php编译参数:your_php_dir/bin/php-i|grepconfigure4、mysql编译参数:catyour_mysql_dir/bin/mysqlbug|grepconfigure以下是完整的实操例子:查看获取nginx的编译参数:[root@www~]#/usr/lo

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),